aether_protocol/
types.rs

1// File: src/types.rs
2// =============================================================================
3// This file defines all the shared data structures that are used in both
4// requests and responses. Keeping them separate ensures they can be reused
5// without creating circular dependencies.
6
7use serde::{Deserialize, Serialize};
8use serde_json::Value;
9use std::collections::HashMap;
10
11/// A type alias for a single record, represented as a map of field names to JSON values.
12pub type Record = HashMap<String, Value>;
13
14/// Represents a set of records returned from a query.
15#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
16pub struct RecordSet {
17    pub records: Vec<Record>,
18}
19
20/// Defines a filter for querying records (the "WHERE" clause).
21#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
22pub enum Filter {
23    Equals { field: String, value: Value },
24    NotEquals { field: String, value: Value },
25    GreaterThan { field: String, value: f64 },
26    LessThan { field: String, value: f64 },
27    In { field: String, values: Vec<Value> },
28    And(Vec<Filter>),
29    Or(Vec<Filter>),
30}
31
32/// Defines query modifiers like sorting, limiting, and pagination.
33#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
34pub struct QueryOptions {
35    pub sort_by: Option<(String, Direction)>,
36    pub limit: Option<usize>,
37    pub offset: Option<usize>,
38}
39
40/// Enum for sorting direction.
41#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq)]
42pub enum Direction {
43    Asc,
44    Desc,
45}
46
47/// A struct to hold database statistics.
48#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
49pub struct DbStats {
50    pub collection_count: usize,
51    pub record_count: usize,
52}
53
54/// A request object for a batch of read operations.
55#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
56pub struct BatchRequest {
57    pub requests: HashMap<String, (String, String, String)>, // Key -> (DB Name, Collection, Record ID)
58}
59
60/// The response from a batch read operation.
61#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
62pub struct BatchResponse {
63    pub results: HashMap<String, Option<Record>>,
64}