1use cyfs_base::*;
2
3use serde_json::{Map, Value};
4
5#[derive(Debug)]
6pub struct DeviceSyncStatus {
7 pub ood_device_id: DeviceId,
8 pub enable_sync: bool,
9
10 pub last_success_ping_time: u64,
11 pub last_ping_result: BuckyErrorCode,
12 pub last_ping_time: u64,
13 pub retry_count: u32,
14
15 pub device_root_state: ObjectId,
16 pub device_root_state_revision: u64,
17
18 pub zone_root_state: Option<ObjectId>,
19 pub zone_root_state_revision: u64,
20}
21
22impl JsonCodec<DeviceSyncStatus> for DeviceSyncStatus {
23 fn encode_json(&self) -> Map<String, Value> {
24 let mut obj = Map::new();
25
26
27 JsonCodecHelper::encode_string_field(
28 &mut obj,
29 "ood_device_id",
30 &self.ood_device_id,
31 );
32
33 JsonCodecHelper::encode_bool_field(
34 &mut obj,
35 "enable_sync",
36 self.enable_sync,
37 );
38
39 JsonCodecHelper::encode_string_field(
40 &mut obj,
41 "last_success_ping_time",
42 &self.last_success_ping_time,
43 );
44
45 JsonCodecHelper::encode_string_field(&mut obj, "last_ping_result", &self.last_ping_result);
46 JsonCodecHelper::encode_string_field(&mut obj, "last_ping_time", &self.last_ping_time);
47 JsonCodecHelper::encode_string_field(&mut obj, "retry_count", &self.retry_count);
48
49 JsonCodecHelper::encode_string_field(
50 &mut obj,
51 "device_root_state",
52 &self.device_root_state,
53 );
54 JsonCodecHelper::encode_string_field(
55 &mut obj,
56 "device_root_state_revision",
57 &self.device_root_state_revision,
58 );
59
60 JsonCodecHelper::encode_option_string_field(&mut obj, "zone_root_state", self.zone_root_state.as_ref());
61 JsonCodecHelper::encode_string_field(
62 &mut obj,
63 "zone_root_state_revision",
64 &self.zone_root_state_revision,
65 );
66
67 obj
68 }
69
70 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
71 let value: u16 = JsonCodecHelper::decode_string_field(&obj, "last_ping_result")?;
72 let last_ping_result = BuckyErrorCode::from(value);
73
74 Ok(Self {
75 ood_device_id: JsonCodecHelper::decode_string_field(&obj, "ood_device_id")?,
76 enable_sync: JsonCodecHelper::decode_bool_field(&obj, "enable_sync")?,
77
78 last_success_ping_time: JsonCodecHelper::decode_string_field(
79 &obj,
80 "last_success_ping_time",
81 )?,
82 last_ping_result,
83 last_ping_time: JsonCodecHelper::decode_string_field(&obj, "last_ping_time")?,
84 retry_count: JsonCodecHelper::decode_string_field(&obj, "retry_count")?,
85
86 device_root_state: JsonCodecHelper::decode_string_field(&obj, "device_root_state")?,
87 device_root_state_revision: JsonCodecHelper::decode_string_field(
88 &obj,
89 "device_root_state_revision",
90 )?,
91
92 zone_root_state: JsonCodecHelper::decode_option_string_field(&obj, "zone_root_state")?,
93 zone_root_state_revision: JsonCodecHelper::decode_string_field(
94 &obj,
95 "zone_root_state_revision",
96 )?,
97 })
98 }
99}