Skip to main content

vtcode_auth/
config.rs

1use serde::{Deserialize, Serialize};
2
3#[cfg(feature = "schema")]
4use schemars::JsonSchema;
5
6use crate::openrouter_oauth::OpenRouterOAuthConfig;
7
8#[derive(Debug, Clone, Default, Serialize, Deserialize)]
9#[cfg_attr(feature = "schema", derive(JsonSchema))]
10pub struct AuthConfig {
11    #[serde(default)]
12    pub openrouter: OpenRouterOAuthConfig,
13    #[serde(default)]
14    pub openai: OpenAIAuthConfig,
15}
16
17#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
18#[cfg_attr(feature = "schema", derive(JsonSchema))]
19#[serde(rename_all = "snake_case")]
20pub enum OpenAIPreferredMethod {
21    #[default]
22    Auto,
23    ApiKey,
24    Chatgpt,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28#[cfg_attr(feature = "schema", derive(JsonSchema))]
29#[serde(default)]
30pub struct OpenAIAuthConfig {
31    pub preferred_method: OpenAIPreferredMethod,
32    pub callback_port: u16,
33    pub auto_refresh: bool,
34    pub flow_timeout_secs: u64,
35}
36
37impl Default for OpenAIAuthConfig {
38    fn default() -> Self {
39        Self {
40            preferred_method: OpenAIPreferredMethod::Auto,
41            callback_port: 1455,
42            auto_refresh: true,
43            flow_timeout_secs: 300,
44        }
45    }
46}
47
48impl OpenAIPreferredMethod {
49    #[must_use]
50    pub fn as_str(self) -> &'static str {
51        match self {
52            Self::Auto => "auto",
53            Self::ApiKey => "api_key",
54            Self::Chatgpt => "chatgpt",
55        }
56    }
57}
58
59impl OpenAIAuthConfig {
60    #[must_use]
61    pub fn callback_url(&self) -> String {
62        format!("http://localhost:{}/callback", self.callback_port)
63    }
64}
65
66#[cfg(test)]
67mod tests {
68    use super::*;
69
70    #[test]
71    fn openai_defaults_match_expected_values() {
72        let config = OpenAIAuthConfig::default();
73        assert_eq!(config.preferred_method, OpenAIPreferredMethod::Auto);
74        assert_eq!(config.callback_port, 1455);
75        assert!(config.auto_refresh);
76        assert_eq!(config.flow_timeout_secs, 300);
77    }
78}