//! Azure authentication and authorization.
use crate::error::Error;
use chrono::{DateTime, Utc};
use oauth2::AccessToken;
use std::fmt::Debug;
/// Represents an Azure service bearer access token with expiry information.
#[derive(Debug, Clone)]
pub struct TokenResponse {
/// Get the access token value.
pub token: AccessToken,
/// Gets the time when the provided token expires.
pub expires_on: DateTime<Utc>,
}
impl TokenResponse {
/// Create a new `TokenResponse`.
pub fn new(token: AccessToken, expires_on: DateTime<Utc>) -> Self {
Self { token, expires_on }
}
}
/// Represents a credential capable of providing an OAuth token.
#[async_trait::async_trait]
pub trait TokenCredential: Send + Sync {
/// Gets a `TokenResponse` for the specified resource
async fn get_token(&self, resource: &str) -> Result<TokenResponse, Error>;
}