#[cfg(feature = "azure-auth")]
pub mod azure_ad;
#[cfg(feature = "bedrock-auth")]
pub mod bedrock_sts;
#[cfg(feature = "vertex-auth")]
pub mod vertex_oauth;
use std::sync::Arc;
use secrecy::SecretString;
use crate::client::BoxFuture;
pub trait CredentialProvider: Send + Sync {
fn resolve(&self) -> BoxFuture<'_, Credential>;
}
impl CredentialProvider for Arc<dyn CredentialProvider> {
fn resolve(&self) -> BoxFuture<'_, Credential> {
(**self).resolve()
}
}
#[derive(Debug, Clone)]
pub enum Credential {
BearerToken(SecretString),
AwsCredentials {
access_key_id: SecretString,
secret_access_key: SecretString,
session_token: Option<SecretString>,
},
}
pub struct StaticTokenProvider {
token: SecretString,
}
impl StaticTokenProvider {
#[must_use]
pub fn new(token: SecretString) -> Self {
Self { token }
}
}
impl CredentialProvider for StaticTokenProvider {
fn resolve(&self) -> BoxFuture<'_, Credential> {
let token = self.token.clone();
Box::pin(async move { Ok(Credential::BearerToken(token)) })
}
}