use serde::Deserialize;
use std::{future::Future, pin::Pin};
use url::Url;
pub type DynErr = Box<dyn std::error::Error + Send + Sync>;
pub type DynFut<T> = Pin<Box<dyn Future<Output = T> + Send>>;
pub type DynRes<T> = Result<T, DynErr>;
pub type DynFutRes<T> = DynFut<DynRes<T>>;
#[derive(Clone, Copy, Deserialize, PartialEq, Eq)]
pub enum ResponseMode {
Fragment,
FormPost,
}
impl ResponseMode {
pub fn as_str(&self) -> &'static str {
match self {
ResponseMode::Fragment => "fragment",
ResponseMode::FormPost => "form_post",
}
}
}
impl Default for ResponseMode {
fn default() -> Self {
ResponseMode::FormPost
}
}
#[derive(Deserialize)]
pub struct DiscoveryDoc {
pub jwks_uri: Url,
pub authorization_endpoint: Url,
}
pub fn base64url_decode<T: ?Sized + AsRef<[u8]>>(data: &T) -> Result<Vec<u8>, base64::DecodeError> {
base64::decode_config(data, base64::URL_SAFE_NO_PAD)
}