sc_rpc_api/system/
helpers.rs1use sc_chain_spec::{ChainType, Properties};
22use serde::{Deserialize, Serialize};
23use std::fmt;
24
25#[derive(Clone, Debug)]
27pub struct SystemInfo {
28 pub impl_name: String,
30 pub impl_version: String,
32 pub chain_name: String,
34 pub properties: Properties,
36 pub chain_type: ChainType,
38}
39
40#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
42#[serde(rename_all = "camelCase")]
43pub struct Health {
44 pub peers: usize,
46 pub is_syncing: bool,
48 pub should_have_peers: bool,
52}
53
54impl fmt::Display for Health {
55 fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
56 write!(fmt, "{} peers ({})", self.peers, if self.is_syncing { "syncing" } else { "idle" })
57 }
58}
59
60#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
62#[serde(rename_all = "camelCase")]
63pub struct PeerInfo<Hash, Number> {
64 pub peer_id: String,
66 pub roles: String,
68 pub best_hash: Hash,
70 pub best_number: Number,
72}
73
74#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
76pub enum NodeRole {
77 Full,
79 Authority,
81}
82
83#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
85#[serde(rename_all = "camelCase")]
86pub struct SyncState<Number> {
87 pub starting_block: Number,
89 pub current_block: Number,
91 pub highest_block: Number,
93}
94
95#[cfg(test)]
96mod tests {
97 use super::*;
98
99 #[test]
100 fn should_serialize_health() {
101 assert_eq!(
102 ::serde_json::to_string(&Health {
103 peers: 1,
104 is_syncing: false,
105 should_have_peers: true,
106 })
107 .unwrap(),
108 r#"{"peers":1,"isSyncing":false,"shouldHavePeers":true}"#,
109 );
110 }
111
112 #[test]
113 fn should_serialize_peer_info() {
114 assert_eq!(
115 ::serde_json::to_string(&PeerInfo {
116 peer_id: "2".into(),
117 roles: "a".into(),
118 best_hash: 5u32,
119 best_number: 6u32,
120 })
121 .unwrap(),
122 r#"{"peerId":"2","roles":"a","bestHash":5,"bestNumber":6}"#,
123 );
124 }
125
126 #[test]
127 fn should_serialize_sync_state() {
128 assert_eq!(
129 ::serde_json::to_string(&SyncState {
130 starting_block: 12u32,
131 current_block: 50u32,
132 highest_block: 128u32,
133 })
134 .unwrap(),
135 r#"{"startingBlock":12,"currentBlock":50,"highestBlock":128}"#,
136 );
137
138 assert_eq!(
139 ::serde_json::to_string(&SyncState {
140 starting_block: 12u32,
141 current_block: 50u32,
142 highest_block: 50u32,
143 })
144 .unwrap(),
145 r#"{"startingBlock":12,"currentBlock":50,"highestBlock":50}"#,
146 );
147 }
148}