hyveos_core/
debug.rs

1use libp2p_identity::PeerId;
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4use ulid::Ulid;
5
6use crate::{
7    discovery::NeighbourEvent,
8    error::{Error, Result},
9    gossipsub, grpc,
10    req_resp::{Request, Response},
11};
12
13#[derive(Debug, Clone, PartialEq, Eq)]
14#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15pub struct MeshTopologyEvent {
16    pub peer_id: PeerId,
17    pub event: NeighbourEvent,
18}
19
20impl From<MeshTopologyEvent> for grpc::MeshTopologyEvent {
21    fn from(event: MeshTopologyEvent) -> Self {
22        Self {
23            peer: event.peer_id.into(),
24            event: event.event.into(),
25        }
26    }
27}
28
29impl TryFrom<grpc::MeshTopologyEvent> for MeshTopologyEvent {
30    type Error = Error;
31
32    fn try_from(event: grpc::MeshTopologyEvent) -> Result<Self> {
33        Ok(Self {
34            peer_id: event.peer.try_into()?,
35            event: event.event.try_into()?,
36        })
37    }
38}
39
40#[derive(Debug, Clone)]
41#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
42pub struct RequestDebugEvent {
43    pub id: Ulid,
44    pub receiver: PeerId,
45    pub msg: Request,
46}
47
48impl From<RequestDebugEvent> for grpc::RequestDebugEvent {
49    fn from(event: RequestDebugEvent) -> Self {
50        Self {
51            id: event.id.into(),
52            receiver: event.receiver.into(),
53            msg: event.msg.into(),
54        }
55    }
56}
57
58impl TryFrom<grpc::RequestDebugEvent> for RequestDebugEvent {
59    type Error = Error;
60
61    fn try_from(event: grpc::RequestDebugEvent) -> Result<Self> {
62        Ok(Self {
63            id: event.id.try_into()?,
64            receiver: event.receiver.try_into()?,
65            msg: event.msg.into(),
66        })
67    }
68}
69
70#[derive(Debug, Clone)]
71#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
72pub struct ResponseDebugEvent {
73    pub req_id: Ulid,
74    pub response: Response,
75}
76
77impl From<ResponseDebugEvent> for grpc::ResponseDebugEvent {
78    fn from(event: ResponseDebugEvent) -> Self {
79        Self {
80            req_id: event.req_id.into(),
81            response: event.response.into(),
82        }
83    }
84}
85
86impl TryFrom<grpc::ResponseDebugEvent> for ResponseDebugEvent {
87    type Error = Error;
88
89    fn try_from(event: grpc::ResponseDebugEvent) -> Result<Self> {
90        Ok(Self {
91            req_id: event.req_id.try_into()?,
92            response: event.response.try_into()?,
93        })
94    }
95}
96
97#[derive(Debug, Clone)]
98#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
99pub enum MessageDebugEventType {
100    Request(RequestDebugEvent),
101    Response(ResponseDebugEvent),
102    GossipSub(gossipsub::Message),
103}
104
105impl From<MessageDebugEventType> for grpc::message_debug_event::Event {
106    fn from(event: MessageDebugEventType) -> Self {
107        match event {
108            MessageDebugEventType::Request(req) => Self::Req(req.into()),
109            MessageDebugEventType::Response(res) => Self::Res(res.into()),
110            MessageDebugEventType::GossipSub(msg) => Self::Gos(msg.into()),
111        }
112    }
113}
114
115impl TryFrom<grpc::message_debug_event::Event> for MessageDebugEventType {
116    type Error = Error;
117
118    fn try_from(event: grpc::message_debug_event::Event) -> Result<Self> {
119        Ok(match event {
120            grpc::message_debug_event::Event::Req(req) => Self::Request(req.try_into()?),
121            grpc::message_debug_event::Event::Res(res) => Self::Response(res.try_into()?),
122            grpc::message_debug_event::Event::Gos(msg) => Self::GossipSub(msg.into()),
123        })
124    }
125}
126
127#[derive(Debug, Clone)]
128#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
129pub struct MessageDebugEvent {
130    pub sender: PeerId,
131    pub event: MessageDebugEventType,
132}
133
134impl From<MessageDebugEvent> for grpc::MessageDebugEvent {
135    fn from(event: MessageDebugEvent) -> Self {
136        Self {
137            sender: event.sender.into(),
138            event: Some(event.event.into()),
139        }
140    }
141}
142
143impl TryFrom<grpc::MessageDebugEvent> for MessageDebugEvent {
144    type Error = Error;
145
146    fn try_from(event: grpc::MessageDebugEvent) -> Result<Self> {
147        Ok(Self {
148            sender: event.sender.try_into()?,
149            event: event.event.ok_or(Error::MissingEvent)?.try_into()?,
150        })
151    }
152}