use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum WalkDirection {
Back,
Forward,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Direction {
Asc,
Desc,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum WhereOp {
Eq,
Neq,
Gt,
Lt,
Gte,
Lte,
Contains,
Matches,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct OrderSpec {
pub field: String,
pub direction: Direction,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct WhereClause {
pub field: String,
pub op: WhereOp,
pub value: Value,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Filter {
Prefix { prefix: String },
Match {
#[serde(rename = "match")]
match_: String,
},
Walk { walk: WalkDirection },
Compare { compare: bool },
Kintsugi { kintsugi: bool },
Order { order: Vec<OrderSpec> },
Limit { limit: u32 },
Where {
#[serde(rename = "where")]
where_: Vec<WhereClause>,
},
}