pub mod service_access_key_credentials;
pub mod service_token;
pub mod service_user_credentials;
use async_trait::async_trait;
use std::time::Duration;
pub use service_access_key_credentials::ServiceAccessKeyCredentials;
pub use service_token::ServiceToken;
pub use service_user_credentials::ServiceUserCredentials;
use super::{
user_credentials::UserCredentials, AutoRefreshable, ClearTokenError, Credentials, GetTokenError,
};
pub enum ServiceCredentials {
AccessKey(Box<ServiceAccessKeyCredentials>),
ConsoleAuth(Box<ServiceUserCredentials<UserCredentials>>),
}
#[async_trait]
impl Credentials for ServiceCredentials {
type Token = ServiceToken;
async fn get_token(&self) -> Result<Self::Token, GetTokenError> {
match self {
ServiceCredentials::AccessKey(ak) => ak.get_token().await,
ServiceCredentials::ConsoleAuth(c) => c.get_token().await,
}
}
async fn clear_token(&self) -> Result<(), ClearTokenError> {
match self {
ServiceCredentials::AccessKey(ak) => ak.clear_token().await,
ServiceCredentials::ConsoleAuth(c) => c.clear_token().await,
}
}
}
#[async_trait]
impl AutoRefreshable for ServiceCredentials {
async fn refresh(&self) -> Duration {
match self {
ServiceCredentials::AccessKey(ak) => ak.refresh().await,
ServiceCredentials::ConsoleAuth(c) => c.refresh().await,
}
}
}