62 lines
1.2 KiB
Rust
62 lines
1.2 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
use std::collections::HashMap;
|
|
|
|
#[derive(Clone, Serialize, Deserialize, Debug)]
|
|
pub struct Message {
|
|
pub src: String,
|
|
pub dest: String,
|
|
pub body: Body,
|
|
}
|
|
|
|
#[derive(Clone, Serialize, Deserialize, Debug)]
|
|
#[serde(tag = "type")]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum Body {
|
|
Error {
|
|
in_reply_to: u64,
|
|
code: u64,
|
|
text: String,
|
|
},
|
|
Init {
|
|
msg_id: u64,
|
|
node_id: String,
|
|
node_ids: Vec<String>,
|
|
},
|
|
InitOk {
|
|
in_reply_to: u64,
|
|
},
|
|
Broadcast {
|
|
msg_id: u64,
|
|
message: u64,
|
|
},
|
|
BroadcastOk {
|
|
msg_id: u64,
|
|
in_reply_to: u64,
|
|
},
|
|
Read {
|
|
msg_id: u64,
|
|
},
|
|
ReadOk {
|
|
msg_id: u64,
|
|
in_reply_to: u64,
|
|
messages: Vec<u64>,
|
|
},
|
|
Topology {
|
|
msg_id: u64,
|
|
topology: HashMap<String, Vec<String>>,
|
|
},
|
|
TopologyOk {
|
|
msg_id: u64,
|
|
in_reply_to: u64,
|
|
},
|
|
}
|
|
|
|
impl Message {
|
|
pub(crate) fn parse_message(message: String) -> Message {
|
|
serde_json::from_str(&message).unwrap()
|
|
}
|
|
|
|
pub(crate) fn format_message(message: Message) -> String {
|
|
serde_json::to_string(&message).unwrap()
|
|
}
|
|
}
|