Skip to main content

outfox_openai/spec/shared/
filter.rs

1use serde::{Deserialize, Serialize};
2
3/// Filters for file search.
4#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
5#[serde(untagged)]
6pub enum Filter {
7    /// A filter used to compare a specified attribute key to a given value using a defined
8    /// comparison operation.
9    Comparison(ComparisonFilter),
10    /// Combine multiple filters using `and` or `or`.
11    Compound(CompoundFilter),
12}
13
14/// Single comparison filter.
15#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
16pub struct ComparisonFilter {
17    /// Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`.
18    /// - `eq`: equals
19    /// - `ne`: not equal
20    /// - `gt`: greater than
21    /// - `gte`: greater than or equal
22    /// - `lt`: less than
23    /// - `lte`: less than or equal
24    /// - `in`: in
25    /// - `nin`: not in
26    pub kind: ComparisonType,
27    /// The key to compare against the value.
28    pub key: String,
29    /// The value to compare against the attribute key; supports string, number, or boolean types.
30    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/// Combine multiple filters using `and` or `or`.
54#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
55pub struct CompoundFilter {
56    /// 'Type of operation: `and` or `or`.'
57    pub kind: CompoundType,
58    /// Array of filters to combine. Items can be ComparisonFilter or CompoundFilter.
59    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}