use serde::{Deserialize, Serialize}; use serde_json::Value; use std::collections::HashMap; // SSOT 模式:不再写供应商副本文件 /// 供应商结构体 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Provider { pub id: String, pub name: String, #[serde(rename = "settingsConfig")] pub settings_config: Value, #[serde(skip_serializing_if = "Option::is_none")] #[serde(rename = "websiteUrl")] pub website_url: Option, #[serde(skip_serializing_if = "Option::is_none")] pub category: Option, #[serde(skip_serializing_if = "Option::is_none")] #[serde(rename = "createdAt")] pub created_at: Option, /// 供应商元数据(不写入 live 配置,仅存于 ~/.cc-switch/config.json) #[serde(skip_serializing_if = "Option::is_none")] pub meta: Option, } impl Provider { /// 从现有ID创建供应商 pub fn with_id( id: String, name: String, settings_config: Value, website_url: Option, ) -> Self { Self { id, name, settings_config, website_url, category: None, created_at: None, meta: None, } } } /// 供应商管理器 #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct ProviderManager { pub providers: HashMap, pub current: String, } /// 供应商元数据 #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct ProviderMeta { /// 自定义端点列表(按 URL 去重存储) #[serde(default, skip_serializing_if = "HashMap::is_empty")] pub custom_endpoints: HashMap, } impl ProviderManager { /// 获取所有供应商 pub fn get_all_providers(&self) -> &HashMap { &self.providers } }