stynx_code_auth/domain/
credential.rs1use 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}