leptos_sync_core/crdt/
mod.rs1mod crdt_basic;
7pub mod list;
8pub mod tree;
9pub mod graph;
10
11pub use crdt_basic::{LwwRegister, LwwMap, GCounter, ReplicaId, Mergeable, CRDT};
13
14pub use list::{
15 ElementId, ElementMetadata, ListElement, ListStrategy, ListConfig,
16 AddWinsList, RemoveWinsList, LwwList,
17};
18
19pub use tree::{
20 NodeId, NodeMetadata, TreeNode, TreeStrategy, TreeConfig,
21 AddWinsTree, RemoveWinsTree,
22};
23
24pub use graph::{
25 VertexId, EdgeId, VertexMetadata, EdgeMetadata, Vertex, Edge,
26 GraphStrategy, GraphConfig, AddWinsGraph, RemoveWinsGraph,
27};
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32 use crate::crdt::ReplicaId;
33 use uuid::Uuid;
34
35 fn create_replica(id: u64) -> ReplicaId {
36 ReplicaId::from(Uuid::from_u64_pair(0, id))
37 }
38
39 #[test]
40 fn test_list_crdt_integration() {
41 let replica = create_replica(1);
42 let mut list = AddWinsList::new(replica);
43
44 let id1 = list.add("item1", 1000);
45 let id2 = list.add("item2", 2000);
46
47 assert_eq!(list.len(), 2);
48 assert!(list.contains(&id1));
49 assert!(list.contains(&id2));
50 }
51
52 #[test]
53 fn test_tree_crdt_integration() {
54 let replica = create_replica(1);
55 let mut tree = AddWinsTree::new(replica);
56
57 let root_id = tree.add_root("root", 1000);
58 let child_id = tree.add_child(&root_id, "child", 2000).unwrap();
59
60 assert_eq!(tree.len(), 2);
61 assert!(tree.contains(&root_id));
62 assert!(tree.contains(&child_id));
63 }
64
65 #[test]
66 fn test_graph_crdt_integration() {
67 let replica = create_replica(1);
68 let mut graph = AddWinsGraph::new(replica);
69
70 let v1_id = graph.add_vertex("vertex1", 1000);
71 let v2_id = graph.add_vertex("vertex2", 2000);
72 let edge_id = graph.add_edge(&v1_id, &v2_id, 3000, None).unwrap();
73
74 assert_eq!(graph.vertex_count(), 2);
75 assert_eq!(graph.edge_count(), 1);
76 assert!(graph.contains_vertex(&v1_id));
77 assert!(graph.contains_edge(&edge_id));
78 }
79
80 #[test]
81 fn test_crdt_traits() {
82 let replica = create_replica(1);
83
84 let list: AddWinsList<String> = AddWinsList::new(replica);
86 let tree: AddWinsTree<String> = AddWinsTree::new(replica);
87 let graph: AddWinsGraph<String> = AddWinsGraph::new(replica);
88
89 let _: &dyn CRDT = &list;
91 let _: &dyn CRDT = &tree;
92 let _: &dyn CRDT = &graph;
93 }
94}