misskey_api/
pagination.rs

1/// Paginated item type in [`PaginationRequest`].
2pub trait PaginationItem {
3    /// The ID type.
4    type Id: Ord;
5    /// Extracts an ID from the item.
6    fn item_id(&self) -> Self::Id;
7}
8
9/// [`Request`][`misskey_core::Request`] that can be paginated via `since_id` and `until_id`.
10pub trait PaginationRequest: misskey_core::Request {
11    /// The paginated item type.
12    type Item: PaginationItem;
13
14    /// Sets the `since_id` field of the request.
15    fn set_since_id(&mut self, since_id: <Self::Item as PaginationItem>::Id);
16    /// Sets the `until_id` field of the request.
17    fn set_until_id(&mut self, until_id: <Self::Item as PaginationItem>::Id);
18    /// Sets the `limit` field of the request.
19    fn set_limit(&mut self, limit: u8);
20}
21
22impl<R: ?Sized> PaginationRequest for &'_ mut R
23where
24    R: PaginationRequest,
25{
26    type Item = R::Item;
27
28    fn set_since_id(&mut self, since_id: <Self::Item as PaginationItem>::Id) {
29        R::set_since_id(self, since_id)
30    }
31    fn set_until_id(&mut self, until_id: <Self::Item as PaginationItem>::Id) {
32        R::set_until_id(self, until_id)
33    }
34    fn set_limit(&mut self, limit: u8) {
35        R::set_limit(self, limit)
36    }
37}
38
39impl<R: ?Sized> PaginationRequest for Box<R>
40where
41    R: PaginationRequest,
42{
43    type Item = R::Item;
44
45    fn set_since_id(&mut self, since_id: <Self::Item as PaginationItem>::Id) {
46        R::set_since_id(self, since_id)
47    }
48    fn set_until_id(&mut self, until_id: <Self::Item as PaginationItem>::Id) {
49        R::set_until_id(self, until_id)
50    }
51    fn set_limit(&mut self, limit: u8) {
52        R::set_limit(self, limit)
53    }
54}
55
56/// [`Request`][`misskey_core::Request`] that can be paginated via `offset`.
57pub trait OffsetPaginationRequest: misskey_core::Request {
58    /// The paginated item type.
59    type Item;
60
61    /// Sets the `offset` field of the request.
62    fn set_offset(&mut self, offset: u64);
63    /// Sets the `limit` field of the request.
64    fn set_limit(&mut self, limit: u8);
65}
66
67impl<R: ?Sized> OffsetPaginationRequest for &'_ mut R
68where
69    R: OffsetPaginationRequest,
70{
71    type Item = R::Item;
72
73    fn set_offset(&mut self, offset: u64) {
74        R::set_offset(self, offset)
75    }
76    fn set_limit(&mut self, limit: u8) {
77        R::set_limit(self, limit)
78    }
79}
80
81impl<R: ?Sized> OffsetPaginationRequest for Box<R>
82where
83    R: OffsetPaginationRequest,
84{
85    type Item = R::Item;
86
87    fn set_offset(&mut self, offset: u64) {
88        R::set_offset(self, offset)
89    }
90    fn set_limit(&mut self, limit: u8) {
91        R::set_limit(self, limit)
92    }
93}