soil_network/
network_state.rs1use libp2p::{
12 core::{ConnectedPoint, Endpoint as CoreEndpoint},
13 Multiaddr,
14};
15use serde::{Deserialize, Serialize};
16use std::{
17 collections::{HashMap, HashSet},
18 time::Duration,
19};
20
21#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
27#[serde(rename_all = "camelCase")]
28pub struct NetworkState {
29 pub peer_id: String,
31 pub listened_addresses: HashSet<Multiaddr>,
33 pub external_addresses: HashSet<Multiaddr>,
35 pub connected_peers: HashMap<String, Peer>,
37 pub not_connected_peers: HashMap<String, NotConnectedPeer>,
39 pub peerset: serde_json::Value,
41}
42
43#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct Peer {
47 pub endpoint: PeerEndpoint,
49 pub version_string: Option<String>,
51 pub latest_ping_time: Option<Duration>,
53 pub known_addresses: HashSet<Multiaddr>,
55}
56
57#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
59#[serde(rename_all = "camelCase")]
60pub struct NotConnectedPeer {
61 pub known_addresses: HashSet<Multiaddr>,
63 pub version_string: Option<String>,
65 pub latest_ping_time: Option<Duration>,
67}
68
69#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
71#[serde(rename_all = "camelCase")]
72pub enum PeerEndpoint {
73 Dialing(Multiaddr, Endpoint),
75 Listening {
77 local_addr: Multiaddr,
79 send_back_addr: Multiaddr,
81 },
82}
83
84#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
86#[serde(rename_all = "camelCase")]
87pub enum Endpoint {
88 Dialer,
90 Listener,
92}
93
94impl From<ConnectedPoint> for PeerEndpoint {
95 fn from(endpoint: ConnectedPoint) -> Self {
96 match endpoint {
97 ConnectedPoint::Dialer { address, role_override, port_use: _ } => {
98 Self::Dialing(address, role_override.into())
99 },
100 ConnectedPoint::Listener { local_addr, send_back_addr } => {
101 Self::Listening { local_addr, send_back_addr }
102 },
103 }
104 }
105}
106
107impl From<CoreEndpoint> for Endpoint {
108 fn from(endpoint: CoreEndpoint) -> Self {
109 match endpoint {
110 CoreEndpoint::Dialer => Self::Dialer,
111 CoreEndpoint::Listener => Self::Listener,
112 }
113 }
114}