use serde::{Deserialize, Serialize};
pub mod dsl;
pub mod exec;
const fn default_page_size() -> u64 {
10
}
const fn default_page() -> u64 {
1
}
#[derive(Debug, Deserialize, Serialize)]
pub struct PaginationQuery {
#[serde(
default = "default_page_size",
rename = "page_size",
deserialize_with = "deserialize_pagination_filter"
)]
pub page_size: u64,
#[serde(
default = "default_page",
rename = "page",
deserialize_with = "deserialize_pagination_filter"
)]
pub page: u64,
}
impl Default for PaginationQuery {
fn default() -> Self {
Self {
page_size: default_page_size(),
page: default_page(),
}
}
}
fn deserialize_pagination_filter<'de, D>(deserializer: D) -> Result<u64, D::Error>
where
D: serde::Deserializer<'de>,
{
let s: String = Deserialize::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
#[derive(Debug)]
pub struct PaginatedResponse<T> {
pub rows: Vec<T>,
pub info: PaginatedInfoResponse,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct PaginatedInfoResponse {
pub page: u64,
pub page_size: u64,
pub total_pages: u64,
}