#[derive(Clone, Debug)]
#[non_exhaustive]
pub enum ResponseShape {
BareArray,
Wrapped {
array_key: String,
},
WrappedByTableName,
}
impl Default for ResponseShape {
fn default() -> Self {
ResponseShape::Wrapped {
array_key: "data".to_string(),
}
}
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub enum PaginationMode {
#[default]
Page,
Skip,
}
#[derive(Clone, Debug)]
#[non_exhaustive]
pub struct PaginationParams {
pub page: String,
pub limit: String,
pub mode: PaginationMode,
}
impl PaginationParams {
pub fn page_limit(page: impl Into<String>, limit: impl Into<String>) -> Self {
Self {
page: page.into(),
limit: limit.into(),
mode: PaginationMode::Page,
}
}
pub fn skip_limit(skip: impl Into<String>, limit: impl Into<String>) -> Self {
Self {
page: skip.into(),
limit: limit.into(),
mode: PaginationMode::Skip,
}
}
}
impl Default for PaginationParams {
fn default() -> Self {
Self::page_limit("_page", "_limit")
}
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[non_exhaustive]
pub enum FilterStrategy {
#[default]
Query,
Client,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub struct OrderingParams {
pub param: String,
pub desc_prefix: String,
}
impl OrderingParams {
pub fn new(param: impl Into<String>, desc_prefix: impl Into<String>) -> Self {
Self {
param: param.into(),
desc_prefix: desc_prefix.into(),
}
}
pub(crate) fn value(&self, field: &str, dir: vantage_vista::SortDirection) -> String {
match dir {
vantage_vista::SortDirection::Ascending => field.to_string(),
vantage_vista::SortDirection::Descending => format!("{}{field}", self.desc_prefix),
}
}
}
pub(crate) type Order<'a> = Option<(&'a str, vantage_vista::SortDirection)>;