ferroui_dynamic_data/cache/page_request.rs
1//! `IPageRequest` and `PageRequest` (`Cache/IPageRequest.cs`, `Cache/PageRequest.cs`).
2
3use std::fmt;
4
5/// A request of a page of sorted items (`IPageRequest`).
6pub trait IPageRequest {
7 /// The page, from 1 (`Page`).
8 fn page(&self) -> usize;
9 /// The number of items of a page (`Size`).
10 fn size(&self) -> usize;
11}
12
13/// A request of a page of sorted items (`PageRequest`): the page, from 1, and its size.
14///
15/// Deviation (DEVIATIONS.md, DynamicData): the page and the size are `usize`, so upstream's
16/// `ArgumentException` for a negative one cannot arise. Two requests are equal when their parts
17/// are (`PageRequest.DefaultComparer`).
18#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
19pub struct PageRequest {
20 page: usize,
21 size: usize,
22}
23
24impl PageRequest {
25 /// The first page of 25 items (`PageRequest.Default`, `new PageRequest()`).
26 pub const DEFAULT: Self = Self { page: 1, size: 25 };
27
28 /// The request of nothing (`PageRequest.Empty`).
29 pub const EMPTY: Self = Self { page: 0, size: 0 };
30
31 /// The page `page` of `size` items (`PageRequest(int page, int size)`).
32 pub const fn new(page: usize, size: usize) -> Self {
33 Self { page, size }
34 }
35
36 /// The page, from 1 (`Page`).
37 pub const fn page(&self) -> usize {
38 self.page
39 }
40
41 /// The number of items of a page (`Size`).
42 pub const fn size(&self) -> usize {
43 self.size
44 }
45}
46
47impl Default for PageRequest {
48 /// The first page of 25 items (`new PageRequest()`).
49 fn default() -> Self {
50 Self::DEFAULT
51 }
52}
53
54impl IPageRequest for PageRequest {
55 fn page(&self) -> usize {
56 self.page
57 }
58
59 fn size(&self) -> usize {
60 self.size
61 }
62}
63
64impl fmt::Display for PageRequest {
65 /// `ToString`.
66 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
67 write!(f, "Page: {}, Size: {}", self.page, self.size)
68 }
69}