use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Credential {
pub provider: String,
#[serde(rename = "type")]
pub cred_type: String,
#[serde(default)]
pub token: Option<String>,
#[serde(default)]
pub keychain_service: Option<String>,
}
impl Credential {
pub fn resolved_token(&self) -> Option<&str> {
self.token.as_deref()
}
pub fn is_oauth(&self) -> bool {
self.cred_type == "oauth"
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UsageStats {
#[serde(default)]
pub last_used: Option<u64>,
#[serde(default)]
pub error_count: Option<u32>,
#[serde(default)]
pub cooldown_until: Option<u64>,
}
#[derive(Debug, Clone, Serialize)]
pub struct TestResult {
pub credential_name: String,
pub provider: String,
pub success: bool,
pub status_code: Option<u16>,
pub error: Option<String>,
pub latency_ms: u64,
}