33 lines
700 B
Rust
33 lines
700 B
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
pub const DEFAULT_PAGE: u64 = 0;
|
|
pub const DEFAULT_PER_PAGE: u64 = 25;
|
|
|
|
#[derive(Deserialize)]
|
|
pub struct Query {
|
|
pub page: Option<u64>,
|
|
pub per_page: Option<u64>,
|
|
}
|
|
|
|
#[derive(Serialize)]
|
|
pub struct PaginatedResponse<T>
|
|
where
|
|
T: for<'de> Serialize,
|
|
{
|
|
pub page: u64,
|
|
pub per_page: u64,
|
|
pub count: usize,
|
|
pub items: Vec<T>,
|
|
}
|
|
|
|
impl Query {
|
|
pub fn res<T: for<'de> Serialize>(self, items: Vec<T>) -> PaginatedResponse<T> {
|
|
PaginatedResponse {
|
|
page: self.page.unwrap_or(DEFAULT_PAGE),
|
|
per_page: self.page.unwrap_or(DEFAULT_PER_PAGE),
|
|
count: items.len(),
|
|
items,
|
|
}
|
|
}
|
|
}
|