cfx_rpc_eth_types/
sync.rs1use cfx_types::U256;
22use serde::{Serialize, Serializer};
23
24#[derive(Default, Debug, Serialize, PartialEq, Clone)]
26#[serde(rename_all = "camelCase")]
27pub struct SyncInfo {
28 pub starting_block: U256,
30 pub current_block: U256,
32 pub highest_block: U256,
34 pub warp_chunks_amount: Option<U256>,
36 pub warp_chunks_processed: Option<U256>,
38}
39
40#[derive(Debug, PartialEq, Clone)]
42pub enum SyncStatus {
43 Info(SyncInfo),
45 None,
47}
48
49impl Serialize for SyncStatus {
50 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
51 where S: Serializer {
52 match *self {
53 SyncStatus::Info(ref info) => info.serialize(serializer),
54 SyncStatus::None => false.serialize(serializer),
55 }
56 }
57}
58
59#[cfg(test)]
60mod tests {
61 use super::{SyncInfo, SyncStatus};
62 use serde_json;
63
64 #[test]
65 fn test_serialize_sync_info() {
66 let t = SyncInfo::default();
67 let serialized = serde_json::to_string(&t).unwrap();
68 assert_eq!(
69 serialized,
70 r#"{"startingBlock":"0x0","currentBlock":"0x0","highestBlock":"0x0","warpChunksAmount":null,"warpChunksProcessed":null}"#
71 );
72 }
73
74 #[test]
75 fn test_serialize_sync_status() {
76 let t = SyncStatus::None;
77 let serialized = serde_json::to_string(&t).unwrap();
78 assert_eq!(serialized, "false");
79
80 let t = SyncStatus::Info(SyncInfo::default());
81 let serialized = serde_json::to_string(&t).unwrap();
82 assert_eq!(
83 serialized,
84 r#"{"startingBlock":"0x0","currentBlock":"0x0","highestBlock":"0x0","warpChunksAmount":null,"warpChunksProcessed":null}"#
85 );
86 }
87}