Skip to main content

braid_core/antimatter/
messages.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct Fissure {
6    pub a: String,
7    pub b: String,
8    pub conn: String,
9    pub versions: HashMap<String, bool>,
10    pub time: u64,
11    #[serde(default)]
12    pub t: Option<u64>, // Connection count/logical time
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct Patch {
17    pub range: String, // Simplified for now, might need structured path
18    pub content: serde_json::Value,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct Version {
23    pub version: String,
24    pub parents: HashMap<String, bool>,
25    #[serde(default)]
26    pub patches: Vec<Patch>,
27    #[serde(default)]
28    pub sort_keys: Option<HashMap<String, String>>, // Depending on implementation
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
32#[serde(tag = "type")]
33#[serde(rename_all = "camelCase")]
34pub enum Message {
35    Subscribe {
36        peer: String,
37        conn: String,
38        #[serde(default)]
39        parents: HashMap<String, bool>,
40        #[serde(default)]
41        protocol_version: Option<u32>,
42    },
43    Update {
44        version: String,
45        parents: HashMap<String, bool>,
46        patches: Vec<Patch>,
47        conn: String,
48        #[serde(default)]
49        ackme: Option<String>,
50    },
51    Ack {
52        seen: String, // "local" or "global"
53        #[serde(default)]
54        version: Option<String>,
55        #[serde(default)]
56        ackme: Option<String>,
57        #[serde(default)]
58        versions: Option<HashMap<String, bool>>, // For ackme acks
59        conn: String,
60        #[serde(default)]
61        unsubscribe: bool,
62    },
63    Fissure {
64        fissure: Option<Fissure>,       // Single fissure
65        fissures: Option<Vec<Fissure>>, // Multiple fissures
66        conn: String,
67    },
68    Welcome {
69        versions: Vec<Version>,
70        fissures: Vec<Fissure>,
71        #[serde(default)]
72        parents: HashMap<String, bool>,
73        #[serde(default)]
74        peer: Option<String>,
75        conn: String,
76    },
77    Ackme {
78        ackme: String,                   // ID of the ackme
79        versions: HashMap<String, bool>, // Versions needing ack
80        conn: String,
81    },
82    Unsubscribe {
83        conn: String,
84    },
85}