elif_orm/query/
pagination.rs1use super::builder::QueryBuilder;
4use super::types::*;
5use serde_json::Value;
6
7impl<M> QueryBuilder<M> {
8 pub fn limit(mut self, count: i64) -> Self {
10 self.limit_count = Some(count);
11 self
12 }
13
14 pub fn offset(mut self, count: i64) -> Self {
16 self.offset_value = Some(count);
17 self
18 }
19
20 pub fn paginate(mut self, per_page: i64, page: i64) -> Self {
22 self.limit_count = Some(per_page);
23 self.offset_value = Some((page - 1) * per_page);
24 self
25 }
26
27 pub fn paginate_cursor<T: Into<Value>>(
29 mut self,
30 cursor_column: &str,
31 cursor_value: Option<T>,
32 per_page: i64,
33 direction: OrderDirection,
34 ) -> Self {
35 self.limit_count = Some(per_page);
36
37 if let Some(cursor_val) = cursor_value {
38 match direction {
39 OrderDirection::Asc => {
40 self = self.where_gt(cursor_column, cursor_val);
41 }
42 OrderDirection::Desc => {
43 self = self.where_lt(cursor_column, cursor_val);
44 }
45 }
46 }
47
48 self.order_by.push((cursor_column.to_string(), direction));
49
50 self
51 }
52}