Skip to main content

ankurah_proto/
message.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{
4    auth::AuthData,
5    id::EntityId,
6    peering::Presence,
7    request::{NodeRequest, NodeResponse},
8    subscription::QueryId,
9    update::{NodeUpdate, NodeUpdateAck},
10};
11
12#[derive(Debug, Serialize, Deserialize)]
13pub enum Message {
14    Presence(Presence),
15    PeerMessage(NodeMessage),
16    // TODO RPC messages
17}
18
19#[derive(Debug, Serialize, Deserialize)]
20pub enum NodeMessage {
21    Request { auth: Vec<AuthData>, request: NodeRequest },
22    Response(NodeResponse),
23    Update(NodeUpdate),
24    UpdateAck(NodeUpdateAck),
25    UnsubscribeQuery { from: EntityId, query_id: QueryId },
26}
27
28impl std::fmt::Display for Message {
29    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30        match self {
31            Message::Presence(presence) => write!(f, "Presence: {}", presence),
32            Message::PeerMessage(node_message) => write!(f, "PeerMessage: {}", node_message),
33        }
34    }
35}
36
37impl std::fmt::Display for NodeMessage {
38    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
39        match self {
40            NodeMessage::Request { request, .. } => write!(f, "Request: {}", request),
41            NodeMessage::Response(response) => write!(f, "Response: {}", response),
42            NodeMessage::Update(update) => write!(f, "Update: {}", update),
43            NodeMessage::UpdateAck(update_ack) => write!(f, "UpdateAck: {}", update_ack),
44            NodeMessage::UnsubscribeQuery { from, query_id } => write!(f, "Unsubscribe: {} {}", from, query_id),
45        }
46    }
47}