ouisync/network/
peer_info.rs1use super::{peer_addr::PeerAddr, peer_source::PeerSource, peer_state::PeerState, stats::Stats};
2use ouisync_macros::api;
3use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer};
4
5#[derive(Eq, PartialEq, Serialize, Deserialize, Debug)]
7#[api]
8pub struct PeerInfo {
9 #[serde(with = "as_str")]
10 pub addr: PeerAddr,
11 pub source: PeerSource,
12 pub state: PeerState,
13 pub stats: Stats,
14}
15
16mod as_str {
17 use super::*;
18
19 pub fn serialize<S>(value: &PeerAddr, s: S) -> Result<S::Ok, S::Error>
20 where
21 S: Serializer,
22 {
23 value.to_string().serialize(s)
24 }
25
26 pub fn deserialize<'de, D>(d: D) -> Result<PeerAddr, D::Error>
27 where
28 D: Deserializer<'de>,
29 {
30 <&str>::deserialize(d)?.parse().map_err(D::Error::custom)
31 }
32}