use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct FilterCondition {
#[serde(rename = "field")]
pub field: String,
#[serde(rename = "op")]
pub op: Op,
#[serde(rename = "value", deserialize_with = "Option::deserialize")]
pub value: Option<serde_json::Value>,
}
impl FilterCondition {
pub fn new(field: String, op: Op, value: Option<serde_json::Value>) -> FilterCondition {
FilterCondition {
field,
op,
value,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Op {
#[serde(rename = "lt")]
Lt,
#[serde(rename = "lte")]
Lte,
#[serde(rename = "gt")]
Gt,
#[serde(rename = "gte")]
Gte,
#[serde(rename = "startswith")]
Startswith,
#[serde(rename = "istartswith")]
Istartswith,
#[serde(rename = "endswith")]
Endswith,
#[serde(rename = "iendswith")]
Iendswith,
#[serde(rename = "contains")]
Contains,
#[serde(rename = "icontains")]
Icontains,
#[serde(rename = "matches")]
Matches,
#[serde(rename = "notcontains")]
Notcontains,
#[serde(rename = "inotcontains")]
Inotcontains,
#[serde(rename = "eq")]
Eq,
#[serde(rename = "neq")]
Neq,
#[serde(rename = "isnull")]
Isnull,
#[serde(rename = "includes")]
Includes,
#[serde(rename = "excludes")]
Excludes,
#[serde(rename = "len_eq")]
LenEq,
}
impl Default for Op {
fn default() -> Op {
Self::Lt
}
}