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}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
73pub enum Operator {
74 Eq,
75 Neq,
76 Gt,
77 Lt,
78 Gte,
79 Lte,
80 SimilarTo,
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84pub enum Value {
85 Text(String),
86 Number(f64),
87 Integer(i64),
88 Bool(bool),
89 Uuid(Uuid),
90 Vector(Vec<f32>),
91 MemoryType(MemoryType),
92 EdgeType(EdgeType),
93}
94
95#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
96pub struct OrderBy {
97 pub field: Field,
98 pub descending: bool,
99}