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 }
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}