1use super::util::*;
20use crate::net;
21
22#[cfg(feature = "event-graph")]
23use crate::event_graph;
24
25#[cfg(feature = "net")]
26impl From<net::channel::ChannelInfo> for JsonValue {
27 fn from(info: net::channel::ChannelInfo) -> JsonValue {
28 json_map([
29 ("addr", JsonStr(info.resolve_addr.unwrap_or(info.connect_addr).to_string())),
30 ("id", JsonNum(info.id.into())),
31 ])
32 }
33}
34
35#[cfg(feature = "net")]
36impl From<net::dnet::MessageInfo> for JsonValue {
37 fn from(info: net::dnet::MessageInfo) -> JsonValue {
38 json_map([
39 ("chan", info.chan.into()),
40 ("cmd", JsonStr(info.cmd)),
41 ("time", JsonStr(info.time.0.to_string())),
42 ])
43 }
44}
45
46#[cfg(feature = "net")]
47impl From<net::dnet::InboundInfo> for JsonValue {
48 fn from(info: net::dnet::InboundInfo) -> JsonValue {
49 json_map([
50 ("addr", JsonStr(info.addr.to_string())),
51 ("channel_id", JsonNum(info.channel_id.into())),
52 ])
53 }
54}
55
56#[cfg(feature = "net")]
57impl From<net::dnet::OutboundSlotSleeping> for JsonValue {
58 fn from(info: net::dnet::OutboundSlotSleeping) -> JsonValue {
59 json_map([("slot", JsonNum(info.slot.into()))])
60 }
61}
62
63#[cfg(feature = "net")]
64impl From<net::dnet::OutboundSlotConnecting> for JsonValue {
65 fn from(info: net::dnet::OutboundSlotConnecting) -> JsonValue {
66 json_map([("slot", JsonNum(info.slot.into())), ("addr", JsonStr(info.addr.to_string()))])
67 }
68}
69
70#[cfg(feature = "net")]
71impl From<net::dnet::OutboundSlotConnected> for JsonValue {
72 fn from(info: net::dnet::OutboundSlotConnected) -> JsonValue {
73 json_map([
74 ("slot", JsonNum(info.slot.into())),
75 ("addr", JsonStr(info.addr.to_string())),
76 ("channel_id", JsonNum(info.channel_id.into())),
77 ])
78 }
79}
80
81#[cfg(feature = "net")]
82impl From<net::dnet::OutboundSlotDisconnected> for JsonValue {
83 fn from(info: net::dnet::OutboundSlotDisconnected) -> JsonValue {
84 json_map([("slot", JsonNum(info.slot.into())), ("err", JsonStr(info.err))])
85 }
86}
87
88#[cfg(feature = "net")]
89impl From<net::dnet::OutboundPeerDiscovery> for JsonValue {
90 fn from(info: net::dnet::OutboundPeerDiscovery) -> JsonValue {
91 json_map([
92 ("attempt", JsonNum(info.attempt.into())),
93 ("state", JsonStr(info.state.to_string())),
94 ])
95 }
96}
97
98#[cfg(feature = "net")]
99impl From<net::dnet::DirectConnecting> for JsonValue {
100 fn from(info: net::dnet::DirectConnecting) -> JsonValue {
101 json_map([("connect_addr", JsonStr(info.connect_addr.to_string()))])
102 }
103}
104
105#[cfg(feature = "net")]
106impl From<net::dnet::DirectConnected> for JsonValue {
107 fn from(info: net::dnet::DirectConnected) -> JsonValue {
108 json_map([
109 ("connect_addr", JsonStr(info.connect_addr.to_string())),
110 ("addr", JsonStr(info.addr.to_string())),
111 ("channel_id", JsonNum(info.channel_id.into())),
112 ])
113 }
114}
115
116#[cfg(feature = "net")]
117impl From<net::dnet::DirectDisconnected> for JsonValue {
118 fn from(info: net::dnet::DirectDisconnected) -> JsonValue {
119 json_map([
120 ("connect_addr", JsonStr(info.connect_addr.to_string())),
121 ("err", JsonStr(info.err)),
122 ])
123 }
124}
125
126#[cfg(feature = "net")]
127impl From<net::dnet::DnetEvent> for JsonValue {
128 fn from(event: net::dnet::DnetEvent) -> JsonValue {
129 match event {
130 net::dnet::DnetEvent::SendMessage(info) => {
131 json_map([("event", json_str("send")), ("info", info.into())])
132 }
133 net::dnet::DnetEvent::RecvMessage(info) => {
134 json_map([("event", json_str("recv")), ("info", info.into())])
135 }
136 net::dnet::DnetEvent::InboundConnected(info) => {
137 json_map([("event", json_str("inbound_connected")), ("info", info.into())])
138 }
139 net::dnet::DnetEvent::InboundDisconnected(info) => {
140 json_map([("event", json_str("inbound_disconnected")), ("info", info.into())])
141 }
142 net::dnet::DnetEvent::OutboundSlotSleeping(info) => {
143 json_map([("event", json_str("outbound_slot_sleeping")), ("info", info.into())])
144 }
145 net::dnet::DnetEvent::OutboundSlotConnecting(info) => {
146 json_map([("event", json_str("outbound_slot_connecting")), ("info", info.into())])
147 }
148 net::dnet::DnetEvent::OutboundSlotConnected(info) => {
149 json_map([("event", json_str("outbound_slot_connected")), ("info", info.into())])
150 }
151 net::dnet::DnetEvent::OutboundSlotDisconnected(info) => {
152 json_map([("event", json_str("outbound_slot_disconnected")), ("info", info.into())])
153 }
154 net::dnet::DnetEvent::OutboundPeerDiscovery(info) => {
155 json_map([("event", json_str("outbound_peer_discovery")), ("info", info.into())])
156 }
157 net::dnet::DnetEvent::DirectConnecting(info) => {
158 json_map([("event", json_str("direct_connecting")), ("info", info.into())])
159 }
160 net::dnet::DnetEvent::DirectConnected(info) => {
161 json_map([("event", json_str("direct_connected")), ("info", info.into())])
162 }
163 net::dnet::DnetEvent::DirectDisconnected(info) => {
164 json_map([("event", json_str("direct_disconnected")), ("info", info.into())])
165 }
166 net::dnet::DnetEvent::DirectPeerDiscovery(info) => {
167 json_map([("event", json_str("direct_peer_discovery")), ("info", info.into())])
168 }
169 }
170 }
171}
172
173#[cfg(feature = "event-graph")]
174impl From<event_graph::Event> for JsonValue {
175 fn from(event: event_graph::Event) -> JsonValue {
176 let parents =
177 event.parents.into_iter().map(|id| JsonStr(id.to_string())).collect::<Vec<_>>();
178 json_map([
179 ("timestamp", JsonNum(event.timestamp as f64)),
180 ("content", JsonStr(bs58::encode(event.content()).into_string())),
181 ("parents", JsonArray(parents)),
182 ("layer", JsonNum(event.layer as f64)),
183 ])
184 }
185}
186
187#[cfg(feature = "event-graph")]
188impl From<event_graph::deg::MessageInfo> for JsonValue {
189 fn from(info: event_graph::deg::MessageInfo) -> JsonValue {
190 json_map([
191 ("info", JsonArray(info.info.into_iter().map(JsonStr).collect())),
192 ("cmd", JsonStr(info.cmd)),
193 ("time", JsonStr(info.time.0.to_string())),
194 ])
195 }
196}
197
198#[cfg(feature = "event-graph")]
199impl From<event_graph::deg::DegEvent> for JsonValue {
200 fn from(event: event_graph::deg::DegEvent) -> JsonValue {
201 match event {
202 event_graph::deg::DegEvent::SendMessage(info) => {
203 json_map([("event", json_str("send")), ("info", info.into())])
204 }
205 event_graph::deg::DegEvent::RecvMessage(info) => {
206 json_map([("event", json_str("recv")), ("info", info.into())])
207 }
208 }
209 }
210}