stakpak_shared/oauth/
error.rs1use thiserror::Error;
4
5#[derive(Error, Debug)]
7pub enum OAuthError {
8 #[error("PKCE challenge not initialized. Call generate_auth_url() first.")]
10 PkceNotInitialized,
11
12 #[error("Token exchange failed: {0}")]
14 TokenExchangeFailed(String),
15
16 #[error("Token refresh failed: {0}")]
18 TokenRefreshFailed(String),
19
20 #[error("Failed to create API key from OAuth tokens")]
22 ApiKeyCreationFailed,
23
24 #[error("Unknown authentication method: {0}")]
26 UnknownMethod(String),
27
28 #[error("Invalid header value")]
30 InvalidHeader,
31
32 #[error("HTTP error: {0}")]
34 HttpError(#[from] reqwest::Error),
35
36 #[error("JSON parse error: {0}")]
38 JsonError(#[from] serde_json::Error),
39
40 #[error("Parse error: {0}")]
42 ParseError(String),
43
44 #[error("Invalid authorization code format: {0}")]
46 InvalidCodeFormat(String),
47
48 #[error("Provider not found: {0}")]
50 ProviderNotFound(String),
51
52 #[error("OAuth not supported for this authentication method")]
54 OAuthNotSupported,
55
56 #[error("File I/O error: {0}")]
58 IoError(#[from] std::io::Error),
59
60 #[error("TOML serialization error: {0}")]
62 TomlSerError(#[from] toml::ser::Error),
63
64 #[error("TOML deserialization error: {0}")]
66 TomlDeError(#[from] toml::de::Error),
67
68 #[error("Authentication required. Run 'stakpak auth login' to authenticate.")]
70 AuthRequired,
71
72 #[error("Token expired. Please re-authenticate with 'stakpak auth login'.")]
74 TokenExpired,
75}
76
77impl OAuthError {
78 pub fn token_exchange_failed(msg: impl Into<String>) -> Self {
80 Self::TokenExchangeFailed(msg.into())
81 }
82
83 pub fn token_refresh_failed(msg: impl Into<String>) -> Self {
85 Self::TokenRefreshFailed(msg.into())
86 }
87
88 pub fn parse_error(msg: impl Into<String>) -> Self {
90 Self::ParseError(msg.into())
91 }
92
93 pub fn invalid_code_format(msg: impl Into<String>) -> Self {
95 Self::InvalidCodeFormat(msg.into())
96 }
97
98 pub fn provider_not_found(provider: impl Into<String>) -> Self {
100 Self::ProviderNotFound(provider.into())
101 }
102
103 pub fn unknown_method(method: impl Into<String>) -> Self {
105 Self::UnknownMethod(method.into())
106 }
107}
108
109pub type OAuthResult<T> = Result<T, OAuthError>;