1use mentedb_core::edge::EdgeType;
4use mentedb_core::memory::MemoryType;
5use mentedb_core::types::MemoryId;
6use serde::{Deserialize, Serialize};
7use uuid::Uuid;
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub enum Statement {
12 Recall(RecallStatement),
13 Relate(RelateStatement),
14 Forget(ForgetStatement),
15 Consolidate(ConsolidateStatement),
16 Traverse(TraverseStatement),
17}
18
19#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
20pub struct RecallStatement {
21 pub filters: Vec<Filter>,
22 pub near: Option<Vec<f32>>,
23 pub limit: Option<usize>,
24 pub order_by: Option<OrderBy>,
25}
26
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28pub struct RelateStatement {
29 pub source: MemoryId,
30 pub target: MemoryId,
31 pub edge_type: EdgeType,
32 pub weight: Option<f32>,
33}
34
35#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
36pub struct ForgetStatement {
37 pub target: MemoryId,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41pub struct ConsolidateStatement {
42 pub filters: Vec<Filter>,
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
46pub struct TraverseStatement {
47 pub start: MemoryId,
48 pub depth: usize,
49 pub edge_filter: Option<Vec<EdgeType>>,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53pub struct Filter {
54 pub field: Field,
55 pub op: Operator,
56 pub value: Value,
57}
58
59#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
60pub enum Field {
61 Content,
62 Type,
63 Tag,
64 Agent,
65 Space,
66 Salience,
67 Confidence,
68 Created,
69 Accessed,
70 ValidAt,
74}
75
76#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
77pub enum Operator {
78 Eq,
79 Neq,
80 Gt,
81 Lt,
82 Gte,
83 Lte,
84 SimilarTo,
85 In,
87 Contains,
89}
90
91#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
92pub enum Value {
93 Text(String),
94 Number(f64),
95 Integer(i64),
96 Bool(bool),
97 Uuid(Uuid),
98 Vector(Vec<f32>),
99 MemoryType(MemoryType),
100 EdgeType(EdgeType),
101 List(Vec<Value>),
103}
104
105#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
106pub struct OrderBy {
107 pub field: Field,
108 pub descending: bool,
109}