use std::{fmt::Debug, sync::Arc};
use crate::types::UserInfo;
pub trait SimpleOAuthProvider: Debug + Send + Sync {
fn authorize_url(&self) -> &str;
fn token_url(&self) -> &str;
fn user_info_url(&self) -> &str;
fn default_scopes(&self) -> &'static [&'static str];
fn extract_user_info(&self, val: serde_json::Value) -> Result<UserInfo, serde_json::Error>;
fn additional_headers(&self) -> Vec<(String, String)> {
vec![]
}
}
impl<T> SimpleOAuthProvider for Box<T>
where
T: SimpleOAuthProvider + ?Sized,
{
fn authorize_url(&self) -> &str {
(**self).authorize_url()
}
fn token_url(&self) -> &str {
(**self).token_url()
}
fn user_info_url(&self) -> &str {
(**self).user_info_url()
}
fn default_scopes(&self) -> &'static [&'static str] {
(**self).default_scopes()
}
fn extract_user_info(&self, val: serde_json::Value) -> Result<UserInfo, serde_json::Error> {
(**self).extract_user_info(val)
}
fn additional_headers(&self) -> Vec<(String, String)> {
(**self).additional_headers()
}
}
impl<T> SimpleOAuthProvider for Arc<T>
where
T: SimpleOAuthProvider + ?Sized,
{
fn authorize_url(&self) -> &str {
(**self).authorize_url()
}
fn token_url(&self) -> &str {
(**self).token_url()
}
fn user_info_url(&self) -> &str {
(**self).user_info_url()
}
fn default_scopes(&self) -> &'static [&'static str] {
(**self).default_scopes()
}
fn extract_user_info(&self, val: serde_json::Value) -> Result<UserInfo, serde_json::Error> {
(**self).extract_user_info(val)
}
fn additional_headers(&self) -> Vec<(String, String)> {
(**self).additional_headers()
}
}