use crate::{CosmosAccountEndpoint, CosmosCredential};
#[cfg(feature = "key_auth")]
use azure_core::credentials::Secret;
use azure_core::credentials::TokenCredential;
use azure_core::http::Url;
use std::sync::Arc;
#[derive(Clone, Debug)]
#[non_exhaustive]
pub struct CosmosAccountReference {
endpoint: CosmosAccountEndpoint,
credential: CosmosCredential,
}
impl CosmosAccountReference {
pub fn with_credential(
endpoint: CosmosAccountEndpoint,
credential: Arc<dyn TokenCredential>,
) -> Self {
Self {
endpoint,
credential: CosmosCredential::from(credential),
}
}
#[cfg(feature = "key_auth")]
pub fn with_master_key(endpoint: CosmosAccountEndpoint, key: Secret) -> Self {
Self {
endpoint,
credential: CosmosCredential::from(key),
}
}
pub(crate) fn into_parts(self) -> (CosmosAccountEndpoint, CosmosCredential) {
(self.endpoint, self.credential)
}
}
impl<C: Into<CosmosCredential>> From<(CosmosAccountEndpoint, C)> for CosmosAccountReference {
fn from((endpoint, credential): (CosmosAccountEndpoint, C)) -> Self {
Self {
endpoint,
credential: credential.into(),
}
}
}
impl<C: Into<CosmosCredential>> From<(Url, C)> for CosmosAccountReference {
fn from((url, credential): (Url, C)) -> Self {
Self {
endpoint: CosmosAccountEndpoint::from(url),
credential: credential.into(),
}
}
}