1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
7#[serde(rename_all = "lowercase")]
8pub enum MemoryState {
9 #[default]
10 Active,
11 Archived,
12 Tombstone,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct MemoryRecord {
18 pub id: String,
19 pub namespace: String,
20 #[serde(default)]
21 pub version: u32,
22 #[serde(default)]
23 pub state: MemoryState,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub source: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub evidence: Option<String>,
28 pub created_at: String,
29 pub updated_at: String,
30}
31
32#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
34#[serde(rename_all = "lowercase")]
35pub enum AuditEventKind {
36 Add,
37 Update,
38 Forget,
39 Search,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct AuditEvent {
45 pub event_id: String,
46 pub kind: AuditEventKind,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub memory_id: Option<String>,
49 pub user_id: String,
50 pub cube_id: String,
51 pub timestamp: String,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub input_summary: Option<String>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub outcome: Option<String>,
56}
57
58#[derive(Debug, Clone, Default)]
60pub struct AuditListOptions {
61 pub user_id: Option<String>,
62 pub cube_id: Option<String>,
63 pub since: Option<String>,
65 pub limit: Option<u32>,
66 pub offset: Option<u32>,
67}