Skip to main content

modelvault_core/query/
ast.rs

1use crate::schema::{CollectionId, FieldPath};
2use crate::ScalarValue;
3
4#[derive(Debug, Clone, PartialEq)]
5pub struct Query {
6    pub collection: CollectionId,
7    pub predicate: Option<Predicate>,
8    pub limit: Option<usize>,
9    pub order_by: Option<OrderBy>,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq)]
13pub struct OrderBy {
14    pub path: FieldPath,
15    pub direction: OrderDirection,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq)]
19pub enum OrderDirection {
20    Asc,
21    Desc,
22}
23
24#[derive(Debug, Clone, PartialEq)]
25pub enum Predicate {
26    Eq { path: FieldPath, value: ScalarValue },
27    Lt { path: FieldPath, value: ScalarValue },
28    Lte { path: FieldPath, value: ScalarValue },
29    Gt { path: FieldPath, value: ScalarValue },
30    Gte { path: FieldPath, value: ScalarValue },
31    And(Vec<Predicate>),
32    Or(Vec<Predicate>),
33}