use async_trait::async_trait;
use chrono::{DateTime, Utc};
use secrecy::SecretString;
use serde::{Deserialize, Serialize};
use crate::error::CredentialError;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CredentialRef {
pub name: String,
pub provider: String,
pub last_rotated: Option<DateTime<Utc>>,
}
#[async_trait]
pub trait CredentialProvider: Send + Sync {
async fn resolve(&self, reference: &str) -> Result<SecretString, CredentialError>;
async fn list_refs(&self) -> Result<Vec<CredentialRef>, CredentialError>;
}