use crate::filter::FilterParams;
use crate::pagination::LimitParam;
use crate::pagination::OffsetParam;
use crate::pagination::Pagination;
use crate::search::SearchParams;
use crate::sort::SortingParams;
#[derive(Clone, Debug, Default)]
pub struct Params {
pub filters: Option<FilterParams>,
pub search: Option<SearchParams>,
pub sort_by: Option<SortingParams>,
pub limit: Option<LimitParam>,
pub offset: Option<OffsetParam>,
pub pagination: Option<Pagination>,
}
impl Params {
pub fn is_empty(&self) -> bool {
self.filters.is_none()
&& self.search.is_none()
&& self.sort_by.is_none()
&& self.pagination.is_none()
&& self.limit.is_none()
&& self.offset.is_none()
}
pub fn has_modifications(&self) -> bool {
!self.is_empty()
}
pub fn is_disable_total_count(&self) -> bool {
match &self.pagination {
Some(Pagination::Slice(slice)) => slice.disable_total_count,
_ => false, }
}
pub fn limit_plus_one(&self) -> u32 {
match &self.pagination {
Some(Pagination::Slice(_)) => 1, Some(Pagination::Cursor(_)) => 1, Some(Pagination::Serial(_)) => 0, None => 0, }
}
}