chore: trait support for plan and recurring interval

This commit is contained in:
Zack Fu Zi Xiang 2024-07-09 13:07:39 +08:00
parent e1e6ad0e95
commit 8b5a803d44
No known key found for this signature in database
1 changed files with 22 additions and 11 deletions

View File

@ -16,12 +16,22 @@ impl RecurringInterval {
} }
} }
impl TryFrom<i16> for RecurringInterval {
type Error = String;
fn try_from(value: i16) -> Result<Self, Self::Error> {
match value {
0 => Ok(RecurringInterval::Month),
1 => Ok(RecurringInterval::Year),
_ => Err(format!("Invalid RecurringInterval value: {}", value)),
}
}
}
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
#[repr(i16)] #[repr(i16)]
pub enum SubscriptionPlan { pub enum SubscriptionPlan {
Unknown = -1,
Free = 0, Free = 0,
Pro = 1, Pro = 1,
Team = 2, Team = 2,
@ -30,15 +40,17 @@ pub enum SubscriptionPlan {
AiLocal = 4, AiLocal = 4,
} }
impl From<i16> for SubscriptionPlan { impl TryFrom<i16> for SubscriptionPlan {
fn from(value: i16) -> Self { type Error = String;
fn try_from(value: i16) -> Result<Self, Self::Error> {
match value { match value {
0 => SubscriptionPlan::Free, 0 => Ok(SubscriptionPlan::Free),
1 => SubscriptionPlan::Pro, 1 => Ok(SubscriptionPlan::Pro),
2 => SubscriptionPlan::Team, 2 => Ok(SubscriptionPlan::Team),
3 => SubscriptionPlan::AiMax, 3 => Ok(SubscriptionPlan::AiMax),
4 => SubscriptionPlan::AiLocal, 4 => Ok(SubscriptionPlan::AiLocal),
_ => SubscriptionPlan::Unknown, _ => Err(format!("Invalid SubscriptionPlan value: {}", value)),
} }
} }
} }
@ -51,7 +63,6 @@ impl AsRef<str> for SubscriptionPlan {
SubscriptionPlan::Team => "team", SubscriptionPlan::Team => "team",
SubscriptionPlan::AiMax => "ai_max", SubscriptionPlan::AiMax => "ai_max",
SubscriptionPlan::AiLocal => "ai_local", SubscriptionPlan::AiLocal => "ai_local",
SubscriptionPlan::Unknown => "unknown",
} }
} }
} }