supabase_rust_realtime/
filters.rs

1use serde::Serialize;
2
3/// データベース変更に対するフィルター条件
4#[derive(Debug, Clone, Serialize)]
5pub struct DatabaseFilter {
6    /// フィルター対象のカラム名
7    pub column: String,
8    /// 比較演算子
9    pub operator: FilterOperator,
10    /// 比較する値
11    pub value: serde_json::Value,
12}
13
14/// フィルター演算子
15#[derive(Debug, Clone, PartialEq, Eq, Serialize)] // Added Eq
16pub enum FilterOperator {
17    /// 等しい
18    Eq,
19    /// 等しくない
20    Neq,
21    /// より大きい
22    Gt,
23    /// より大きいか等しい
24    Gte,
25    /// より小さい
26    Lt,
27    /// より小さいか等しい
28    Lte,
29    /// 含む
30    In,
31    // Note: Removed duplicates and less common/clear operators for now
32    // NotIn,
33    // ContainedBy,
34    // Contains,
35    // ContainedByArray,
36    // Like,
37    // ILike,
38}
39
40impl std::fmt::Display for FilterOperator {
41    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
42        let s = match self {
43            FilterOperator::Eq => "eq",
44            FilterOperator::Neq => "neq",
45            FilterOperator::Gt => "gt",
46            FilterOperator::Gte => "gte",
47            FilterOperator::Lt => "lt",
48            FilterOperator::Lte => "lte",
49            FilterOperator::In => "in",
50            // FilterOperator::NotIn => "not.in",
51            // FilterOperator::ContainedBy => "contained_by",
52            // FilterOperator::Contains => "contains",
53            // FilterOperator::ContainedByArray => "contained_by_array",
54            // FilterOperator::Like => "like",
55            // FilterOperator::ILike => "ilike",
56        };
57        write!(f, "{}", s)
58    }
59}