aiclient_api/config/
types.rs1use 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}