1use serde::{Deserialize, Serialize};
2
3use crate::common;
4
5#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
9#[serde(rename_all = "snake_case")]
10pub enum Filter {
11 Raw(RawFilter),
12 NullCheck(NullCheckFilter),
13 ValueOp(ValueOpFilter),
14}
15
16#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
17pub struct RawFilter {
18 pub raw: common::RawFilterValue,
19}
20
21#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
23pub struct NullCheckFilter {
24 pub column: common::ColumnName,
25 pub op: NullOp,
26}
27
28#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
30pub struct ValueOpFilter {
31 pub column: common::ColumnName,
32 pub op: FilterOp,
33 pub value: FilterValue,
34}
35
36#[derive(Debug, Clone, Hash, Serialize, Deserialize)]
39#[serde(rename_all = "snake_case")]
40pub enum FilterValue {
41 Single(String),
42 List(Vec<String>),
43 Range(String, String),
44}
45
46#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)]
47#[serde(rename_all = "snake_case")]
48pub enum NullOp {
49 IsNull,
50 IsNotNull,
51}
52
53#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)]
54#[serde(rename_all = "snake_case")]
55pub enum FilterOp {
56 Eq,
57 Neq,
58 Lt,
59 Lte,
60 Gt,
61 Gte,
62 In,
63 NotIn,
64 Like,
65 Ilike,
66 Between,
67}