cyfs_lib/sync/
request.rs

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}