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}
86
87#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
88pub enum Value {
89 Text(String),
90 Number(f64),
91 Integer(i64),
92 Bool(bool),
93 Uuid(Uuid),
94 Vector(Vec<f32>),
95 MemoryType(MemoryType),
96 EdgeType(EdgeType),
97}
98
99#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
100pub struct OrderBy {
101 pub field: Field,
102 pub descending: bool,
103}