| use serde::{Deserialize, Serialize}; |
|
|
| |
| #[derive(Debug, Clone, Serialize, Deserialize)] |
| pub struct ModelQuota { |
| pub name: String, |
| pub percentage: i32, |
| pub reset_time: String, |
| |
| |
| #[serde(skip_serializing_if = "Option::is_none")] |
| pub display_name: Option<String>, |
| #[serde(skip_serializing_if = "Option::is_none")] |
| pub supports_images: Option<bool>, |
| #[serde(skip_serializing_if = "Option::is_none")] |
| pub supports_thinking: Option<bool>, |
| #[serde(skip_serializing_if = "Option::is_none")] |
| pub thinking_budget: Option<i32>, |
| #[serde(skip_serializing_if = "Option::is_none")] |
| pub recommended: Option<bool>, |
| #[serde(skip_serializing_if = "Option::is_none")] |
| pub max_tokens: Option<i32>, |
| #[serde(skip_serializing_if = "Option::is_none")] |
| pub max_output_tokens: Option<i32>, |
| #[serde(skip_serializing_if = "Option::is_none")] |
| pub supported_mime_types: Option<std::collections::HashMap<String, bool>>, |
| } |
|
|
| |
| #[derive(Debug, Clone, Serialize, Deserialize)] |
| pub struct QuotaData { |
| pub models: Vec<ModelQuota>, |
| pub last_updated: i64, |
| #[serde(default)] |
| pub is_forbidden: bool, |
| |
| #[serde(default)] |
| pub forbidden_reason: Option<String>, |
| |
| #[serde(default)] |
| pub subscription_tier: Option<String>, |
| |
| #[serde(default)] |
| pub model_forwarding_rules: std::collections::HashMap<String, String>, |
| } |
|
|
| impl QuotaData { |
| pub fn new() -> Self { |
| Self { |
| models: Vec::new(), |
| last_updated: chrono::Utc::now().timestamp(), |
| is_forbidden: false, |
| forbidden_reason: None, |
| subscription_tier: None, |
| model_forwarding_rules: std::collections::HashMap::new(), |
| } |
| } |
|
|
| pub fn add_model(&mut self, model: ModelQuota) { |
| self.models.push(model); |
| } |
| } |
|
|
| impl Default for QuotaData { |
| fn default() -> Self { |
| Self::new() |
| } |
| } |
|
|