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#[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, }
22
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
25pub struct Lww<T> {
26 pub value: T,
27 pub timestamp: Timestamp,
28}
29
30pub use crate::crdt::gset::GSet;
32
33#[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}