Skip to main content

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}