use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Fissure {
pub a: String,
pub b: String,
pub conn: String,
pub versions: HashMap<String, bool>,
pub time: u64,
#[serde(default)]
pub t: Option<u64>, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Patch {
pub range: String, pub content: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Version {
pub version: String,
pub parents: HashMap<String, bool>,
#[serde(default)]
pub patches: Vec<Patch>,
#[serde(default)]
pub sort_keys: Option<HashMap<String, String>>, }
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
#[serde(rename_all = "camelCase")]
pub enum Message {
Subscribe {
peer: String,
conn: String,
#[serde(default)]
parents: HashMap<String, bool>,
#[serde(default)]
protocol_version: Option<u32>,
},
Update {
version: String,
parents: HashMap<String, bool>,
patches: Vec<Patch>,
conn: String,
#[serde(default)]
ackme: Option<String>,
},
Ack {
seen: String, #[serde(default)]
version: Option<String>,
#[serde(default)]
ackme: Option<String>,
#[serde(default)]
versions: Option<HashMap<String, bool>>, conn: String,
#[serde(default)]
unsubscribe: bool,
},
Fissure {
fissure: Option<Fissure>, fissures: Option<Vec<Fissure>>, conn: String,
},
Welcome {
versions: Vec<Version>,
fissures: Vec<Fissure>,
#[serde(default)]
parents: HashMap<String, bool>,
#[serde(default)]
peer: Option<String>,
conn: String,
},
Ackme {
ackme: String, versions: HashMap<String, bool>, conn: String,
},
Unsubscribe {
conn: String,
},
}