icydb_core/db/primitives/limit/
ext.rs1use crate::db::primitives::limit::LimitExpr;
2
3pub trait LimitSlot {
8 fn limit_slot(&mut self) -> &mut Option<LimitExpr>;
9}
10
11impl<T: LimitSlot> LimitExt for T {}
16
17pub trait LimitExt: LimitSlot + Sized {
18 #[must_use]
19 fn page(self, limit: Option<u32>, offset: Option<u32>) -> Self {
20 self.limit_opt(limit).offset_opt(offset)
21 }
22
23 #[must_use]
24 fn limit(self, limit: u32) -> Self {
25 let mut me = self;
26
27 let slot = me.limit_slot();
28 let expr = slot.take().unwrap_or_default().limit(limit);
29 *slot = Some(expr);
30
31 me
32 }
33
34 #[must_use]
35 fn limit_opt(self, opt: Option<u32>) -> Self {
36 if let Some(limit) = opt {
37 self.limit(limit)
38 } else {
39 self
40 }
41 }
42
43 #[must_use]
44 fn offset(self, offset: u32) -> Self {
45 let mut me = self;
46
47 let slot = me.limit_slot();
48 let expr = slot.take().unwrap_or_default().offset(offset);
49 *slot = Some(expr);
50
51 me
52 }
53
54 #[must_use]
55 fn offset_opt(self, opt: Option<u32>) -> Self {
56 if let Some(offset) = opt {
57 self.offset(offset)
58 } else {
59 self
60 }
61 }
62}