use anyhow::Error;
use df_rocket_okapi::{
gen::OpenApiGenerator, request::get_nested_query_parameters, request::OpenApiFromQuery,
};
#[allow(unused_imports)]
use log::{debug, error, info, trace, warn};
use rocket::request::{FromQuery, Query};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct ApiCountPagination {
pub page: Option<u32>,
pub per_page: Option<u32>,
pub etag: Option<String>,
pub filter_by: Option<String>,
pub filter_value: Option<String>,
}
impl<'q> FromQuery<'q> for ApiCountPagination {
type Error = Error;
fn from_query(query: Query<'q>) -> Result<Self, Self::Error> {
let mut api_page_request = ApiCountPagination::default();
for key in query {
match key.key.url_decode()?.as_ref() {
"page" => api_page_request.page = Some(key.value.parse::<u32>()?),
"per_page" => api_page_request.per_page = Some(key.value.parse::<u32>()?),
"etag" => api_page_request.etag = Some(key.value.url_decode_lossy()),
"filter_by" => api_page_request.filter_by = Some(key.value.url_decode_lossy()),
"filter_value" => {
api_page_request.filter_value = Some(key.value.url_decode_lossy())
}
_ => {}
}
}
Ok(api_page_request)
}
}
impl<'r> OpenApiFromQuery<'r> for ApiCountPagination {
fn query_multi_parameter(
gen: &mut OpenApiGenerator,
name: String,
required: bool,
) -> df_rocket_okapi::Result<Vec<okapi::openapi3::Parameter>> {
Ok(get_nested_query_parameters::<ApiCountPagination>(
gen, name, required,
))
}
}