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