Co-authored-by: Sharang Parnerkar <parnerkarsharang@gmail.com> Reviewed-on: #6
85 lines
2.3 KiB
Rust
85 lines
2.3 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
/// Role assigned to an organization member.
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
pub enum MemberRole {
|
|
/// Full administrative access
|
|
Admin,
|
|
/// Standard user access
|
|
Member,
|
|
/// Read-only access
|
|
Viewer,
|
|
}
|
|
|
|
impl MemberRole {
|
|
/// Returns the display label for a member role.
|
|
pub fn label(&self) -> &'static str {
|
|
match self {
|
|
Self::Admin => "Admin",
|
|
Self::Member => "Member",
|
|
Self::Viewer => "Viewer",
|
|
}
|
|
}
|
|
|
|
/// Returns all available roles for populating dropdowns.
|
|
pub fn all() -> &'static [Self] {
|
|
&[Self::Admin, Self::Member, Self::Viewer]
|
|
}
|
|
}
|
|
|
|
/// A member of the organization.
|
|
///
|
|
/// # Fields
|
|
///
|
|
/// * `id` - Unique member identifier
|
|
/// * `name` - Display name
|
|
/// * `email` - Email address
|
|
/// * `role` - Assigned role within the organization
|
|
/// * `joined_at` - ISO 8601 join date
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
pub struct OrgMember {
|
|
pub id: String,
|
|
pub name: String,
|
|
pub email: String,
|
|
pub role: MemberRole,
|
|
pub joined_at: String,
|
|
}
|
|
|
|
/// A pricing plan tier.
|
|
///
|
|
/// # Fields
|
|
///
|
|
/// * `id` - Unique plan identifier
|
|
/// * `name` - Plan display name (e.g. "Starter", "Team", "Enterprise")
|
|
/// * `price_eur` - Monthly price in euros
|
|
/// * `features` - List of included features
|
|
/// * `highlighted` - Whether this plan should be visually emphasized
|
|
/// * `max_seats` - Maximum number of seats, None for unlimited
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
pub struct PricingPlan {
|
|
pub id: String,
|
|
pub name: String,
|
|
pub price_eur: u32,
|
|
pub features: Vec<String>,
|
|
pub highlighted: bool,
|
|
pub max_seats: Option<u32>,
|
|
}
|
|
|
|
/// Billing usage statistics for the current cycle.
|
|
///
|
|
/// # Fields
|
|
///
|
|
/// * `seats_used` - Number of active seats
|
|
/// * `seats_total` - Total seats in the plan
|
|
/// * `tokens_used` - Tokens consumed this billing cycle
|
|
/// * `tokens_limit` - Token limit for the billing cycle
|
|
/// * `billing_cycle_end` - ISO 8601 date when the current cycle ends
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
pub struct BillingUsage {
|
|
pub seats_used: u32,
|
|
pub seats_total: u32,
|
|
pub tokens_used: u64,
|
|
pub tokens_limit: u64,
|
|
pub billing_cycle_end: String,
|
|
}
|