use std::sync::Arc;
use aws_credential_types::Credentials;
use aws_credential_types::provider::ProvideCredentials;
use crate::CloudError;
#[derive(Clone)]
pub struct BedrockCredentialProvider {
inner: Arc<dyn ProvideCredentials>,
}
impl BedrockCredentialProvider {
pub fn from_provider(inner: Arc<dyn ProvideCredentials>) -> Self {
Self { inner }
}
pub async fn default_chain() -> Self {
let config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let provider = config
.credentials_provider()
.expect("aws_config::load_defaults always installs a credentials provider");
Self {
inner: Arc::new(provider),
}
}
pub async fn resolve(&self) -> Result<Credentials, CloudError> {
self.inner
.provide_credentials()
.await
.map_err(CloudError::credential)
}
}