Skip to main content

stynx_code_auth/domain/
credential.rs

1use std::fmt;
2
3#[derive(Clone)]
4pub enum Credential {
5    ApiKey {
6        api_key: String,
7        base_url: String,
8    },
9    AuthToken {
10        token: String,
11        base_url: String,
12    },
13    ClaudeCodeOAuth {
14        access_token: String,
15        expires_at: u64,
16    },
17}
18
19impl fmt::Debug for Credential {
20    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21        match self {
22            Credential::ApiKey { base_url, .. } => f
23                .debug_struct("ApiKey")
24                .field("api_key", &"[redacted]")
25                .field("base_url", base_url)
26                .finish(),
27            Credential::AuthToken { base_url, .. } => f
28                .debug_struct("AuthToken")
29                .field("token", &"[redacted]")
30                .field("base_url", base_url)
31                .finish(),
32            Credential::ClaudeCodeOAuth { expires_at, .. } => f
33                .debug_struct("ClaudeCodeOAuth")
34                .field("access_token", &"[redacted]")
35                .field("expires_at", expires_at)
36                .finish(),
37        }
38    }
39}
40
41impl Credential {
42    pub fn base_url(&self) -> &str {
43        match self {
44            Credential::ApiKey { base_url, .. } => base_url,
45            Credential::AuthToken { base_url, .. } => base_url,
46            Credential::ClaudeCodeOAuth { .. } => "https://api.anthropic.com",
47        }
48    }
49
50    pub fn is_oauth(&self) -> bool {
51        matches!(
52            self,
53            Credential::ClaudeCodeOAuth { .. } | Credential::AuthToken { .. }
54        )
55    }
56}