#![cfg_attr(
feature = "utoipa",
allow(
clippy::option_if_let_else,
reason = "utoipa's `ToSchema` expands the generic `items` field's schema to an if-let/else"
)
)]
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct PageDto<T> {
pub page: Option<u32>,
pub page_size: Option<u32>,
pub total_pages: Option<u32>,
pub total_items: u32,
pub items: Vec<T>,
}
impl<T> PageDto<T> {
#[must_use]
pub fn new(page: Option<u32>, page_size: Option<u32>, total_items: u32, items: Vec<T>) -> Self {
let total_pages = page_size
.filter(|&page_size| page_size != 0)
.map(|page_size| total_items.div_ceil(page_size));
Self {
page,
page_size,
total_pages,
total_items,
items,
}
}
}