elif_orm/query/
pagination.rs1use serde_json::Value;
4use super::builder::QueryBuilder;
5use super::types::*;
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>>(mut self, cursor_column: &str, cursor_value: Option<T>, per_page: i64, direction: OrderDirection) -> Self {
29 self.limit_count = Some(per_page);
30
31 if let Some(cursor_val) = cursor_value {
32 match direction {
33 OrderDirection::Asc => {
34 self = self.where_gt(cursor_column, cursor_val);
35 }
36 OrderDirection::Desc => {
37 self = self.where_lt(cursor_column, cursor_val);
38 }
39 }
40 }
41
42 self.order_by.push((cursor_column.to_string(), direction));
43
44 self
45 }
46}