use super::builder::QueryBuilder;
use super::types::*;
use serde_json::Value;
impl<M> QueryBuilder<M> {
pub fn limit(mut self, count: i64) -> Self {
self.limit_count = Some(count);
self
}
pub fn offset(mut self, count: i64) -> Self {
self.offset_value = Some(count);
self
}
pub fn paginate(mut self, per_page: i64, page: i64) -> Self {
self.limit_count = Some(per_page);
self.offset_value = Some((page - 1) * per_page);
self
}
pub fn paginate_cursor<T: Into<Value>>(
mut self,
cursor_column: &str,
cursor_value: Option<T>,
per_page: i64,
direction: OrderDirection,
) -> Self {
self.limit_count = Some(per_page);
if let Some(cursor_val) = cursor_value {
match direction {
OrderDirection::Asc => {
self = self.where_gt(cursor_column, cursor_val);
}
OrderDirection::Desc => {
self = self.where_lt(cursor_column, cursor_val);
}
}
}
self.order_by.push((cursor_column.to_string(), direction));
self
}
}