use serde::Deserialize;
use serde_json::Value;
#[derive(Debug, Deserialize)]
pub struct QueryParams {
pub filter: Option<FilterExpr>,
pub group_by: Option<Vec<String>>,
pub having: Option<FilterExpr>,
pub sort: Vec<SortItem>,
pub page: u32,
pub page_size: u32,
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
pub enum FilterExpr {
And { and: Vec<FilterExpr> },
Or { or: Vec<FilterExpr> },
Cond(FilterCond),
}
#[derive(Debug, Deserialize)]
pub struct FilterCond {
pub field: Option<String>,
pub op: Op,
pub value: Option<Value>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Op {
Eq,
Ne,
Like,
Gt,
Lt,
Gte,
Lte,
In,
NotIn,
Between,
FindInSet,
JsonContains,
IsNull,
IsNotNull,
Exists,
NotExists,
}
#[derive(Debug, Deserialize)]
pub struct SortItem {
pub field: String,
pub desc: bool,
}
#[derive(Debug, Deserialize)]
pub struct ExistsValue {
pub sql: String,
pub bind: Option<Vec<Value>>,
}