use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CredentialStatus {
pub scheme_name: String,
pub is_configured: bool,
pub source: CredentialSource,
pub validation_status: ValidationStatus,
pub last_used: Option<chrono::DateTime<chrono::Utc>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CredentialSource {
Environment(String), ConfigFile(String), Keychain(String), Profile(String), Interactive, NotConfigured,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ValidationStatus {
Valid,
Invalid(String), Expired,
NotValidated,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SelectedAuth {
pub scheme_name: String,
pub scheme_type: super::SchemeType,
pub credentials: HashMap<String, String>, pub source: CredentialSource,
pub reason: SelectionReason,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SelectionReason {
OnlyOption,
ExplicitSelection,
BestAvailable(String), Default,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthDiagnostic {
pub operation: String,
pub error_type: AuthErrorType,
pub missing_credentials: Vec<MissingCredential>,
pub valid_options: Vec<ValidOption>,
pub suggestions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AuthErrorType {
NoCredentials,
InvalidCredentials,
ExpiredToken,
InsufficientScopes(Vec<String>),
SchemeNotSupported(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MissingCredential {
pub scheme_name: String,
pub credential_type: String,
pub expected_location: CredentialSource,
pub setup_command: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidOption {
pub schemes: Vec<String>,
pub all_configured: bool,
pub setup_commands: Vec<String>,
}