use async_trait::async_trait;
use dyn_clone::DynClone;
use graph_error::AuthExecutionResult;
#[derive(Clone, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum ForceTokenRefresh {
#[default]
Never,
Once,
Always,
}
dyn_clone::clone_trait_object!(ClientApplication);
#[async_trait]
pub trait ClientApplication: DynClone + Send + Sync {
fn get_token_silent(&mut self) -> AuthExecutionResult<String>;
async fn get_token_silent_async(&mut self) -> AuthExecutionResult<String>;
fn with_force_token_refresh(&mut self, force_token_refresh: ForceTokenRefresh);
}
#[async_trait]
impl ClientApplication for String {
fn get_token_silent(&mut self) -> AuthExecutionResult<String> {
Ok(self.clone())
}
async fn get_token_silent_async(&mut self) -> AuthExecutionResult<String> {
Ok(self.clone())
}
fn with_force_token_refresh(&mut self, _force_token_refresh: ForceTokenRefresh) {}
}