outfox_openai/spec/shared/
filter.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
5#[serde(untagged)]
6pub enum Filter {
7 Comparison(ComparisonFilter),
10 Compound(CompoundFilter),
12}
13
14#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
16pub struct ComparisonFilter {
17 pub kind: ComparisonType,
27 pub key: String,
29 pub value: serde_json::Value,
31}
32
33#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
34pub enum ComparisonType {
35 #[serde(rename = "eq")]
36 Equals,
37 #[serde(rename = "ne")]
38 NotEquals,
39 #[serde(rename = "gt")]
40 GreaterThan,
41 #[serde(rename = "gte")]
42 GreaterThanOrEqual,
43 #[serde(rename = "lt")]
44 LessThan,
45 #[serde(rename = "lte")]
46 LessThanOrEqual,
47 #[serde(rename = "in")]
48 In,
49 #[serde(rename = "nin")]
50 NotIn,
51}
52
53#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
55pub struct CompoundFilter {
56 pub kind: CompoundType,
58 pub filters: Vec<Filter>,
60}
61
62#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
63#[serde(rename_all = "lowercase")]
64pub enum CompoundType {
65 And,
66 Or,
67}