aurora_db/reactive/
updates.rs1use crate::types::Document;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6pub enum UpdateType {
7 Added,
9 Removed,
11 Modified,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
17pub enum QueryUpdate {
18 Added(Document),
20
21 Removed(Document),
23
24 Modified { old: Document, new: Document },
26}
27
28impl QueryUpdate {
29 pub fn update_type(&self) -> UpdateType {
31 match self {
32 QueryUpdate::Added(_) => UpdateType::Added,
33 QueryUpdate::Removed(_) => UpdateType::Removed,
34 QueryUpdate::Modified { .. } => UpdateType::Modified,
35 }
36 }
37
38 pub fn document(&self) -> &Document {
40 match self {
41 QueryUpdate::Added(doc) => doc,
42 QueryUpdate::Removed(doc) => doc,
43 QueryUpdate::Modified { new, .. } => new,
44 }
45 }
46
47 pub fn id(&self) -> &str {
49 &self.document().id
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56 use crate::types::Value;
57 use std::collections::HashMap;
58
59 #[test]
60 fn test_query_update_types() {
61 let mut data = HashMap::new();
62 data.insert("name".to_string(), Value::String("Test".into()));
63
64 let doc = Document {
65 id: "1".to_string(),
66 data: data.clone(),
67 };
68
69 let added = QueryUpdate::Added(doc.clone());
70 assert!(matches!(added.update_type(), UpdateType::Added));
71 assert_eq!(added.id(), "1");
72
73 let removed = QueryUpdate::Removed(doc.clone());
74 assert!(matches!(removed.update_type(), UpdateType::Removed));
75
76 let modified = QueryUpdate::Modified {
77 old: doc.clone(),
78 new: doc.clone(),
79 };
80 assert!(matches!(modified.update_type(), UpdateType::Modified));
81 }
82}