azure_identity/token_credentials/
options.rs
use crate::env::Env;
use azure_core::error::{ErrorKind, ResultExt};
use std::sync::Arc;
use url::Url;
const AZURE_AUTHORITY_HOST_ENV_KEY: &str = "AZURE_AUTHORITY_HOST";
const AZURE_PUBLIC_CLOUD: &str = "https://login.microsoftonline.com";
#[derive(Debug, Clone)]
pub struct TokenCredentialOptions {
env: Env,
http_client: Arc<dyn azure_core::HttpClient>,
authority_host: String,
}
impl Default for TokenCredentialOptions {
fn default() -> Self {
let env = Env::default();
let authority_host = env
.var(AZURE_AUTHORITY_HOST_ENV_KEY)
.unwrap_or_else(|_| AZURE_PUBLIC_CLOUD.to_owned());
Self {
env: Env::default(),
http_client: azure_core::new_http_client(),
authority_host,
}
}
}
impl TokenCredentialOptions {
#[cfg(test)]
pub(crate) fn new(env: Env, http_client: Arc<dyn azure_core::HttpClient>) -> Self {
Self {
env,
http_client,
authority_host: AZURE_PUBLIC_CLOUD.to_owned(),
}
}
pub fn set_authority_host(&mut self, authority_host: String) {
self.authority_host = authority_host;
}
pub fn authority_host(&self) -> azure_core::Result<Url> {
Url::parse(&self.authority_host).with_context(ErrorKind::DataConversion, || {
format!("invalid authority host URL {}", &self.authority_host)
})
}
pub fn http_client(&self) -> Arc<dyn azure_core::HttpClient> {
self.http_client.clone()
}
pub(crate) fn env(&self) -> &Env {
&self.env
}
}
impl From<Arc<dyn azure_core::HttpClient>> for TokenCredentialOptions {
fn from(http_client: Arc<dyn azure_core::HttpClient>) -> Self {
Self {
http_client,
..Default::default()
}
}
}