//! Database query parameter types. //! //! This module contains types used for building dynamic SQL queries, //! including WHERE conditions, sorting, and filtering. use serde::{Deserialize, Serialize}; use serde_json::Value; use std::collections::HashMap; /// Represents a single condition in a WHERE clause. /// /// Supports three types of operations: /// - `eq`: Exact match (field = value) /// - `in_values`: Array membership (field IN (...)) /// - `contains`: Pattern matching (field ILIKE '%value%') #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WhereCondition { pub eq: Option, #[serde(rename = "in")] pub in_values: Option>, pub contains: Option, } /// Represents a complete WHERE clause with AND/OR conditions. /// /// The main conditions map is combined with AND logic. /// The or_conditions map (if present) is combined with OR logic /// and the entire OR group is ANDed with the main conditions. /// /// Example JSON: /// ```json /// { /// "collection": {"eq": "app.bsky.feed.post"}, /// "author": {"eq": "did:plc:123"}, /// "$or": { /// "lang": {"eq": "en"}, /// "lang": {"eq": "es"} /// } /// } /// ``` #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WhereClause { #[serde(flatten)] pub conditions: HashMap, #[serde(rename = "$or")] pub or_conditions: Option>, } /// Represents a field to sort by with direction. /// /// Used for multi-field sorting in queries. #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SortField { pub field: String, pub direction: String, }