1use thiserror::Error;
2
3#[derive(Error, Debug)]
5pub enum OpenAIAuthError {
6 #[error("Failed to create OAuth client: {0}")]
7 ClientCreation(String),
8
9 #[error("Invalid authorization code")]
10 InvalidAuthorizationCode,
11
12 #[error("Token exchange failed: {0}")]
13 TokenExchange(String),
14
15 #[error("Token refresh failed: {0}")]
16 TokenRefresh(String),
17
18 #[error("Token has expired")]
19 TokenExpired,
20
21 #[error("Invalid JWT token: {0}")]
22 InvalidJwt(String),
23
24 #[error("Missing claim in JWT: {0}")]
25 MissingJwtClaim(String),
26
27 #[error("Network error: {0}")]
28 Network(#[from] reqwest::Error),
29
30 #[error("HTTP error: {status}: {body}")]
31 Http { status: u16, body: String },
32
33 #[error("API key exchange failed: {status}: {body}")]
34 ApiKeyExchange { status: u16, body: String },
35
36 #[error("OAuth error: {0}")]
37 OAuth(String),
38
39 #[error("URL parse error: {0}")]
40 UrlParse(#[from] url::ParseError),
41
42 #[cfg(feature = "callback-server")]
43 #[error("Callback server error: {0}")]
44 CallbackServer(String),
45
46 #[cfg(feature = "browser")]
47 #[error("Failed to open browser: {0}")]
48 BrowserLaunch(String),
49
50 #[error("Serialization error: {0}")]
51 Serialization(#[from] serde_json::Error),
52
53 #[error("JWT decode error: {0}")]
54 JwtDecode(#[from] jsonwebtoken::errors::Error),
55
56 #[error("Invalid configuration: {0}")]
57 InvalidConfig(String),
58
59 #[error("Base64 decode error: {0}")]
60 Base64Decode(#[from] base64::DecodeError),
61}
62
63pub type Result<T> = std::result::Result<T, OpenAIAuthError>;