Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T02:17:59.573Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

plan.rs

69 lines · 2.0 KB · rust
1use serde::{Deserialize, Serialize};
2
3use crate::{KnownOrUnknown, Timestamp};
4
5#[derive(Debug, Clone, Copy, Default, PartialEq, Serialize, Deserialize)]
6#[serde(rename_all = "snake_case")]
7pub enum Plan {
8    #[default]
9    ZedFree,
10    ZedPro,
11    ZedProTrial,
12    ZedBusiness,
13    ZedVip,
14    ZedStudent,
15}
16
17#[derive(Debug, PartialEq, Serialize, Deserialize)]
18pub struct PlanInfo {
19    /// We've named this field `plan_v3` to avoid breaking older clients when we start returning new plan variants.
20    #[serde(rename = "plan_v3")]
21    pub plan: KnownOrUnknown<Plan, String>,
22    pub subscription_period: Option<SubscriptionPeriod>,
23    pub usage: cloud_llm_client::CurrentUsage,
24    pub trial_started_at: Option<Timestamp>,
25    pub is_account_too_young: bool,
26    pub has_overdue_invoices: bool,
27}
28
29impl PlanInfo {
30    pub fn plan(&self) -> Plan {
31        match &self.plan {
32            KnownOrUnknown::Known(plan) => *plan,
33            KnownOrUnknown::Unknown(_) => {
34                // If we get a plan that we don't recognize, fall back to the Free plan.
35                Plan::ZedFree
36            }
37        }
38    }
39}
40
41#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize)]
42pub struct SubscriptionPeriod {
43    pub started_at: Timestamp,
44    pub ended_at: Timestamp,
45}
46
47#[cfg(test)]
48mod tests {
49    use pretty_assertions::assert_eq;
50    use serde_json::json;
51
52    use super::*;
53
54    #[test]
55    fn test_plan_deserialize_snake_case() {
56        let plan = serde_json::from_value::<Plan>(json!("zed_free")).unwrap();
57        assert_eq!(plan, Plan::ZedFree);
58
59        let plan = serde_json::from_value::<Plan>(json!("zed_pro")).unwrap();
60        assert_eq!(plan, Plan::ZedPro);
61
62        let plan = serde_json::from_value::<Plan>(json!("zed_pro_trial")).unwrap();
63        assert_eq!(plan, Plan::ZedProTrial);
64
65        let plan = serde_json::from_value::<Plan>(json!("zed_student")).unwrap();
66        assert_eq!(plan, Plan::ZedStudent);
67    }
68}
69
Served at tenant.openagents/omega Member data and write actions are omitted.