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>,
26 pub condition: Option<Condition>,
31 pub near: Option<Vec<f32>>,
32 pub limit: Option<usize>,
33 pub order_by: Option<OrderBy>,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41pub enum Condition {
42 And(Vec<Condition>),
43 Or(Vec<Condition>),
44 Not(Box<Condition>),
45 Leaf(Filter),
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49pub struct RelateStatement {
50 pub source: MemoryId,
51 pub target: MemoryId,
52 pub edge_type: EdgeType,
53 pub weight: Option<f32>,
54}
55
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
57pub struct ForgetStatement {
58 pub target: MemoryId,
59}
60
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
62pub struct ConsolidateStatement {
63 pub filters: Vec<Filter>,
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67pub struct TraverseStatement {
68 pub start: MemoryId,
69 pub depth: usize,
70 pub edge_filter: Option<Vec<EdgeType>>,
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
74pub struct Filter {
75 pub field: Field,
76 pub op: Operator,
77 pub value: Value,
78}
79
80#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
81pub enum Field {
82 Content,
83 Type,
84 Tag,
85 Agent,
86 Space,
87 Salience,
88 Confidence,
89 Created,
90 Accessed,
91 ValidAt,
95}
96
97#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
98pub enum Operator {
99 Eq,
100 Neq,
101 Gt,
102 Lt,
103 Gte,
104 Lte,
105 SimilarTo,
106 In,
108 Contains,
110}
111
112#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
113pub enum Value {
114 Text(String),
115 Number(f64),
116 Integer(i64),
117 Bool(bool),
118 Uuid(Uuid),
119 Vector(Vec<f32>),
120 MemoryType(MemoryType),
121 EdgeType(EdgeType),
122 List(Vec<Value>),
124}
125
126#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
127pub struct OrderBy {
128 pub field: Field,
129 pub descending: bool,
130}