use serde::{Deserialize, Serialize};
use crate::common;
#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum Filter {
Raw(RawFilter),
NullCheck(NullCheckFilter),
ValueOp(ValueOpFilter),
}
#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
pub struct RawFilter {
pub raw: common::RawFilterValue,
}
#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
pub struct NullCheckFilter {
pub column: common::ColumnName,
pub op: NullOp,
}
#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
pub struct ValueOpFilter {
pub column: common::ColumnName,
pub op: FilterOp,
pub value: FilterValue,
}
#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FilterValue {
Single(String),
List(Vec<String>),
Range(String, String),
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum NullOp {
IsNull,
IsNotNull,
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FilterOp {
Eq,
Neq,
Lt,
Lte,
Gt,
Gte,
In,
NotIn,
Like,
Ilike,
Between,
}