#[async_trait::async_trait]
pub trait RequestTrait {
fn content_type(&self) -> mime::Mime;
fn header<K>(&self, key: K) -> Option<&str>
where
K: axum::http::header::AsHeaderName;
fn user_agent(&self) -> &str;
async fn path<T: serde::de::DeserializeOwned + Send + 'static>(
&mut self,
) -> Result<T, axum::extract::rejection::PathRejection>;
#[cfg(feature = "request-query")]
async fn query<T: serde::de::DeserializeOwned + 'static>(
&mut self,
) -> Result<T, axum::extract::rejection::QueryRejection>;
#[cfg(feature = "request-form")]
async fn form<T: serde::de::DeserializeOwned>(
self,
) -> Result<T, axum::extract::rejection::FormRejection>;
#[cfg(feature = "request-json")]
async fn json<T: serde::de::DeserializeOwned>(
self,
) -> Result<T, axum::extract::rejection::JsonRejection>;
#[cfg(feature = "request-multipart")]
async fn multipart<T: serde::de::DeserializeOwned>(self) -> crate::Result<T, crate::Error>;
#[cfg(feature = "request-multipart")]
async fn file(self, key: &str) -> crate::Result<Option<axum::body::Bytes>, crate::Error>;
#[cfg(feature = "request-validate")]
async fn validate<T: serde::de::DeserializeOwned + validator::Validate>(
self,
) -> crate::Result<T, crate::Error>;
#[cfg(feature = "request-id")]
fn id(&self) -> Option<&str>;
#[cfg(feature = "request-auth")]
fn user(&self) -> Option<ayun_auth::jwt::UserClaims>;
#[cfg(feature = "request-auth")]
fn token(&self) -> crate::Result<String, crate::Error>;
}