Skip to main content

aiclient_api/config/
types.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
5#[serde(rename_all = "lowercase")]
6pub enum Format {
7    OpenAI,
8    Anthropic,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
12#[serde(rename_all = "lowercase")]
13pub enum AccountType {
14    #[default]
15    Individual,
16    Business,
17    Enterprise,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct Config {
22    #[serde(default = "default_format")]
23    pub default_format: Format,
24    #[serde(default = "default_provider")]
25    pub default_provider: String,
26    #[serde(default)]
27    pub api_key: String,
28    #[serde(default = "default_vscode_version")]
29    pub vscode_version: String,
30    #[serde(default)]
31    pub server: ServerConfig,
32    #[serde(default)]
33    pub providers: HashMap<String, ProviderConfig>,
34    #[serde(default)]
35    pub logging: LogConfig,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct ServerConfig {
40    #[serde(default = "default_host")]
41    pub host: String,
42    #[serde(default = "default_port")]
43    pub port: u16,
44    #[serde(default)]
45    pub rate_limit_seconds: u64,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(tag = "type")]
50pub enum ProviderConfig {
51    #[serde(rename = "copilot")]
52    Copilot {
53        #[serde(default = "default_true")]
54        enabled: bool,
55        #[serde(default)]
56        account_type: AccountType,
57        enterprise_url: Option<String>,
58    },
59    #[serde(rename = "kiro")]
60    Kiro {
61        #[serde(default = "default_true")]
62        enabled: bool,
63        #[serde(default = "default_region")]
64        region: String,
65        idc_region: Option<String>,
66    },
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct LogConfig {
71    #[serde(default = "default_log_level")]
72    pub level: String,
73    #[serde(default)]
74    pub file: String,
75}
76
77fn default_format() -> Format { Format::OpenAI }
78fn default_provider() -> String { "copilot".to_string() }
79fn default_vscode_version() -> String { "1.110.1".to_string() }
80fn default_host() -> String { "127.0.0.1".to_string() }
81fn default_port() -> u16 { 9090 }
82fn default_true() -> bool { true }
83fn default_region() -> String { "us-east-1".to_string() }
84fn default_log_level() -> String { "info".to_string() }
85
86impl Default for Config {
87    fn default() -> Self {
88        Config {
89            default_format: default_format(),
90            default_provider: default_provider(),
91            api_key: String::new(),
92            vscode_version: default_vscode_version(),
93            server: ServerConfig::default(),
94            providers: HashMap::new(),
95            logging: LogConfig::default(),
96        }
97    }
98}
99
100impl Default for ServerConfig {
101    fn default() -> Self {
102        ServerConfig { host: default_host(), port: default_port(), rate_limit_seconds: 0 }
103    }
104}
105
106impl Default for LogConfig {
107    fn default() -> Self { LogConfig { level: default_log_level(), file: String::new() } }
108}