2021-12-29 18:33:31 +01:00
|
|
|
mod error;
|
2021-07-19 22:29:03 +02:00
|
|
|
pub mod models;
|
2021-12-29 18:33:31 +01:00
|
|
|
mod routes;
|
2021-07-19 22:29:03 +02:00
|
|
|
|
2022-01-11 19:42:15 +01:00
|
|
|
use async_trait::async_trait;
|
|
|
|
use axum::extract::{FromRequest, RequestParts};
|
2021-08-26 17:45:38 +02:00
|
|
|
pub use routes::routes;
|
2022-01-11 19:42:15 +01:00
|
|
|
use serde::de::DeserializeOwned;
|
|
|
|
|
2022-07-19 21:11:13 +02:00
|
|
|
use crate::error::APIError;
|
2022-01-11 19:42:15 +01:00
|
|
|
|
|
|
|
pub struct Query<T>(pub T);
|
|
|
|
|
|
|
|
#[async_trait]
|
|
|
|
impl<T, B> FromRequest<B> for Query<T>
|
|
|
|
where
|
|
|
|
T: DeserializeOwned,
|
|
|
|
B: Send,
|
|
|
|
{
|
|
|
|
type Rejection = APIError;
|
|
|
|
|
|
|
|
async fn from_request(req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
|
|
|
|
let query = axum::extract::Query::<T>::from_request(req).await?;
|
|
|
|
Ok(Self(query.0))
|
|
|
|
}
|
|
|
|
}
|