Skip to main content

bones_core/crdt/
mod.rs

1pub mod gset;
2pub mod item_state;
3pub mod lww;
4pub mod merge;
5pub mod orset;
6pub mod state;
7pub mod trace;
8
9use chrono::{DateTime, Utc};
10use serde::{Deserialize, Serialize};
11use std::collections::HashSet;
12use std::hash::Hash;
13
14/// Timestamp for Last-Write-Wins CRDT
15#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, PartialOrd, Ord)]
16pub struct Timestamp {
17    pub wall: DateTime<Utc>,
18    pub actor: u64,
19    pub event_hash: u64,
20    pub itc: u64, // Simplified ITC for now
21}
22
23/// Last-Write-Wins Register
24#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
25pub struct Lww<T> {
26    pub value: T,
27    pub timestamp: Timestamp,
28}
29
30/// Grow-only Set
31pub use crate::crdt::gset::GSet;
32
33/// Observed-Remove Set (Add-Wins)
34#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
35pub struct OrSet<T: Hash + Eq> {
36    pub elements: HashSet<(T, Timestamp)>,
37    pub tombstone: HashSet<(T, Timestamp)>,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
41pub enum Phase {
42    Init,
43    Propose,
44    Commit,
45}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
48pub struct EpochPhase {
49    pub epoch: u64,
50    pub phase: Phase,
51}