use std::fmt;
use tonic::{Request, Status};
#[cfg_attr(doc, doc(cfg(feature = "role-header")))]
#[cfg(any(doc, feature = "role-header"))]
pub mod role_header;
pub trait FromRequest
where
Self: Sized,
{
type Error: std::error::Error + Into<Status>;
fn from_request<T>(request: &mut Request<T>) -> Result<Self, Self::Error>;
}
#[derive(Debug)]
pub struct UnitConversion;
impl fmt::Display for UnitConversion {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(formatter, "{self:?}")
}
}
impl std::error::Error for UnitConversion {}
impl From<UnitConversion> for Status {
fn from(_: UnitConversion) -> Self {
Self::internal("Infallible unit conversion somehow failed")
}
}
impl FromRequest for () {
type Error = UnitConversion;
fn from_request<T>(_: &mut Request<T>) -> Result<Self, Self::Error> {
Ok(())
}
}