1use core::fmt::{self, Display};
4
5use serde::{Deserialize, Serialize};
6
7use crate::{chain, channel::Channels, node, prelude::*, serializers, Moniker, Version};
8
9#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
11pub struct Info {
12 pub protocol_version: ProtocolVersionInfo,
14
15 pub id: node::Id,
17
18 pub listen_addr: ListenAddress,
20
21 pub network: chain::Id,
23
24 pub version: Version,
26
27 pub channels: Channels,
29
30 pub moniker: Moniker,
32
33 pub other: OtherInfo,
35}
36
37#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
39pub struct ProtocolVersionInfo {
40 #[serde(with = "serializers::from_str")]
42 pub p2p: u64,
43
44 #[serde(with = "serializers::from_str")]
46 pub block: u64,
47
48 #[serde(with = "serializers::from_str")]
50 pub app: u64,
51}
52
53#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
55pub struct ListenAddress(String);
56
57impl ListenAddress {
58 pub fn new(s: String) -> ListenAddress {
60 ListenAddress(s)
61 }
62
63 pub fn as_str(&self) -> &str {
64 &self.0
65 }
66}
67
68impl Display for ListenAddress {
69 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
70 write!(f, "{}", self.0)
71 }
72}
73
74#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
76pub struct OtherInfo {
77 pub tx_index: TxIndexStatus,
79
80 pub rpc_address: String,
82}
83
84#[derive(Copy, Clone, Debug, Deserialize, Eq, PartialEq, Serialize, Default)]
86pub enum TxIndexStatus {
87 #[serde(rename = "on")]
89 #[default]
90 On,
91
92 #[serde(rename = "off")]
94 Off,
95}
96
97impl From<TxIndexStatus> for bool {
98 fn from(status: TxIndexStatus) -> bool {
99 match status {
100 TxIndexStatus::On => true,
101 TxIndexStatus::Off => false,
102 }
103 }
104}