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, pub highlighted: bool, pub max_seats: Option, } /// 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, }