cyfs_lib/util/
output_request_codec.rs

1use super::output_request::*;
2use cyfs_base::*;
3use std::convert::TryFrom;
4use std::path::PathBuf;
5
6use serde_json::{Map, Value};
7
8impl JsonCodec<UtilResolveOODOutputResponse> for UtilResolveOODOutputResponse {
9    fn encode_json(&self) -> Map<String, Value> {
10        let mut obj = Map::new();
11
12        JsonCodecHelper::encode_str_array_field(&mut obj, "device_list", &self.device_list);
13
14        obj
15    }
16
17    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
18        Ok(Self {
19            device_list: JsonCodecHelper::decode_str_array_field(obj, "device_list")?,
20        })
21    }
22}
23
24impl JsonCodec<DeviceStaticInfo> for DeviceStaticInfo {
25    fn encode_json(&self) -> Map<String, Value> {
26        let mut obj = Map::new();
27
28        JsonCodecHelper::encode_string_field(&mut obj, "device_id", &self.device_id);
29
30        let buf = self.device.to_vec().unwrap();
31        JsonCodecHelper::encode_string_field(&mut obj, "device", &hex::encode(&buf));
32
33        JsonCodecHelper::encode_string_field(&mut obj, "zone_role", &self.zone_role);
34        JsonCodecHelper::encode_string_field(&mut obj, "ood_work_mode", &self.ood_work_mode);
35
36        JsonCodecHelper::encode_string_field(&mut obj, "root_state_access_mode", &self.root_state_access_mode);
37        JsonCodecHelper::encode_string_field(&mut obj, "local_cache_access_mode", &self.local_cache_access_mode);
38
39        JsonCodecHelper::encode_string_field(&mut obj, "is_ood_device", &self.is_ood_device);
40        JsonCodecHelper::encode_string_field(&mut obj, "ood_device_id", &self.ood_device_id);
41        JsonCodecHelper::encode_string_field(&mut obj, "zone_id", &self.zone_id);
42
43        if let Some(id) = &self.owner_id {
44            JsonCodecHelper::encode_string_field(&mut obj, "owner_id", id);
45        }
46
47        JsonCodecHelper::encode_string_field(&mut obj, "cyfs_root", &self.cyfs_root);
48
49        if self.sn_list.len() > 0 {
50            JsonCodecHelper::encode_str_array_field(&mut obj, "sn_list", &self.sn_list);
51        }
52        if self.known_sn_list.len() > 0 {
53            JsonCodecHelper::encode_str_array_field(&mut obj, "known_sn_list", &self.known_sn_list);
54        }
55
56        obj
57    }
58
59    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
60        let ret = Self {
61            device_id: JsonCodecHelper::decode_string_field(obj, "device_id")?,
62            device: JsonCodecHelper::decode_object_field(obj, "device")?,
63            zone_role: JsonCodecHelper::decode_string_field(obj, "zone_role")?,
64            ood_work_mode: JsonCodecHelper::decode_string_field(obj, "ood_work_mode")?,
65
66            root_state_access_mode: JsonCodecHelper::decode_string_field(obj, "root_state_access_mode")?,
67            local_cache_access_mode: JsonCodecHelper::decode_string_field(obj, "local_cache_access_mode")?,
68
69            is_ood_device: JsonCodecHelper::decode_string_field(obj, "is_ood_device")?,
70            ood_device_id: JsonCodecHelper::decode_string_field(obj, "ood_device_id")?,
71            zone_id: JsonCodecHelper::decode_string_field(obj, "zone_id")?,
72            owner_id: JsonCodecHelper::decode_option_string_field(obj, "owner_id")?,
73            cyfs_root: JsonCodecHelper::decode_string_field(obj, "cyfs_root")?,
74            sn_list: JsonCodecHelper::decode_str_array_field(obj, "sn_list")?,
75            known_sn_list: JsonCodecHelper::decode_str_array_field(obj, "known_sn_list")?,
76        };
77
78        Ok(ret)
79    }
80}
81
82impl JsonCodec<UtilGetDeviceStaticInfoOutputResponse> for UtilGetDeviceStaticInfoOutputResponse {
83    fn encode_json(&self) -> Map<String, Value> {
84        let mut obj = Map::new();
85
86        JsonCodecHelper::encode_field(&mut obj, "info", &self.info);
87
88        obj
89    }
90
91    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
92        let ret = Self {
93            info: JsonCodecHelper::decode_field(obj, "info")?,
94        };
95
96        Ok(ret)
97    }
98}
99
100impl JsonCodec<BdtNetworkAccessEndpoint> for BdtNetworkAccessEndpoint {
101    fn encode_json(&self) -> Map<String, Value> {
102        let mut obj = Map::new();
103
104        JsonCodecHelper::encode_string_field(&mut obj, "lan_ep", &self.lan_ep);
105        JsonCodecHelper::encode_string_field(&mut obj, "wan_ep", &self.wan_ep);
106        JsonCodecHelper::encode_string_field(&mut obj, "access_type", &self.access_type);
107        obj
108    }
109
110    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
111        let ret = Self {
112            lan_ep: JsonCodecHelper::decode_string_field(obj, "lan_ep")?,
113            wan_ep: JsonCodecHelper::decode_string_field(obj, "wan_ep")?,
114            access_type: JsonCodecHelper::decode_string_field(obj, "access_type")?,
115        };
116
117        Ok(ret)
118    }
119}
120
121impl JsonCodec<BdtNetworkAccessSn> for BdtNetworkAccessSn {
122    fn encode_json(&self) -> Map<String, Value> {
123        let mut obj = Map::new();
124
125        JsonCodecHelper::encode_string_field(&mut obj, "sn", &self.sn);
126        JsonCodecHelper::encode_string_field(&mut obj, "sn_status", &self.sn_status);
127        obj
128    }
129
130    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
131        let ret = Self {
132            sn: JsonCodecHelper::decode_string_field(obj, "sn")?,
133            sn_status: JsonCodecHelper::decode_string_field(obj, "sn_status")?,
134        };
135
136        Ok(ret)
137    }
138}
139
140impl JsonCodec<BdtNetworkAccessInfo> for BdtNetworkAccessInfo {
141    fn encode_json(&self) -> Map<String, Value> {
142        let mut obj = Map::new();
143
144        JsonCodecHelper::encode_as_list(&mut obj, "v4", &self.v4);
145        JsonCodecHelper::encode_as_list(&mut obj, "v6", &self.v6);
146        JsonCodecHelper::encode_as_list(&mut obj, "sn", &self.sn);
147        obj
148    }
149
150    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
151        let ret = Self {
152            v4: JsonCodecHelper::decode_array_field(obj, "v4")?,
153            v6: JsonCodecHelper::decode_array_field(obj, "v6")?,
154            sn: JsonCodecHelper::decode_array_field(obj, "sn")?,
155        };
156
157        Ok(ret)
158    }
159}
160
161impl JsonCodec<UtilGetNetworkAccessInfoOutputResponse> for UtilGetNetworkAccessInfoOutputResponse {
162    fn encode_json(&self) -> Map<String, Value> {
163        let mut obj = Map::new();
164
165        JsonCodecHelper::encode_field(&mut obj, "info", &self.info);
166
167        obj
168    }
169
170    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
171        let ret = Self {
172            info: JsonCodecHelper::decode_field(obj, "info")?,
173        };
174
175        Ok(ret)
176    }
177}
178
179impl JsonCodec<VersionInfo> for VersionInfo {
180    fn encode_json(&self) -> Map<String, Value> {
181        let mut obj = Map::new();
182
183        JsonCodecHelper::encode_string_field(&mut obj, "version", &self.version);
184        JsonCodecHelper::encode_string_field(&mut obj, "channel", &self.channel);
185        JsonCodecHelper::encode_string_field(&mut obj, "target", &self.target);
186        obj
187    }
188
189    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
190        let ret = Self {
191            version: JsonCodecHelper::decode_string_field(obj, "version")?,
192            channel: JsonCodecHelper::decode_string_field(obj, "channel")?,
193            target: JsonCodecHelper::decode_string_field(obj, "target")?,
194        };
195
196        Ok(ret)
197    }
198}
199
200impl JsonCodec<UtilGetVersionInfoOutputResponse> for UtilGetVersionInfoOutputResponse {
201    fn encode_json(&self) -> Map<String, Value> {
202        let mut obj = Map::new();
203
204        JsonCodecHelper::encode_field(&mut obj, "info", &self.info);
205
206        obj
207    }
208
209    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
210        let ret = Self {
211            info: JsonCodecHelper::decode_field(obj, "info")?,
212        };
213
214        Ok(ret)
215    }
216}
217
218impl JsonCodec<UtilOutputRequestCommon> for UtilOutputRequestCommon {
219    fn encode_json(&self) -> Map<String, Value> {
220        let mut obj = Map::new();
221        JsonCodecHelper::encode_option_string_field(&mut obj, "dec_id", self.dec_id.as_ref());
222        JsonCodecHelper::encode_option_string_field(&mut obj, "target", self.target.as_ref());
223        JsonCodecHelper::encode_option_string_field(&mut obj, "req_path", self.req_path.as_ref());
224        JsonCodecHelper::encode_number_field(&mut obj, "flags", self.flags);
225        obj
226    }
227
228    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<UtilOutputRequestCommon> {
229        Ok(Self {
230            req_path: JsonCodecHelper::decode_option_string_field(obj, "req_path")?,
231            dec_id: JsonCodecHelper::decode_option_string_field(obj, "dec_id")?,
232            target: JsonCodecHelper::decode_option_string_field(obj, "target")?,
233            flags: JsonCodecHelper::decode_int_field(obj, "flags")?,
234        })
235    }
236}
237
238impl JsonCodec<UtilBuildFileOutputRequest> for UtilBuildFileOutputRequest {
239    fn encode_json(&self) -> Map<String, Value> {
240        let mut obj = Map::new();
241        JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
242        JsonCodecHelper::encode_string_field(
243            &mut obj,
244            "local_path",
245            &self.local_path.to_string_lossy().to_string(),
246        );
247        JsonCodecHelper::encode_string_field(&mut obj, "owner", &self.owner);
248        JsonCodecHelper::encode_number_field(&mut obj, "chunk_size", self.chunk_size);
249        JsonCodecHelper::encode_option_string_field(&mut obj, "chunk_method", Some(format!("{:?}", self.chunk_method)).as_ref());
250
251        if let Some(access) = &self.access {
252            JsonCodecHelper::encode_number_field(&mut obj, "access", access.value());
253        }
254        
255        obj
256    }
257
258    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<UtilBuildFileOutputRequest> {
259        let common: UtilOutputRequestCommon = JsonCodecHelper::decode_field(obj, "common")?;
260
261        let access: Option<u32> = JsonCodecHelper::decode_option_int_field(obj, "access")?;
262        let access = access.map(|v| AccessString::new(v));
263
264        Ok(Self {
265            common,
266            local_path: PathBuf::from(JsonCodecHelper::decode_string_field::<String>(
267                obj,
268                "local_path",
269            )?),
270            owner: JsonCodecHelper::decode_string_field(obj, "owner")?,
271            chunk_size: JsonCodecHelper::decode_int_field(obj, "chunk_size")?, 
272            chunk_method: JsonCodecHelper::decode_option_string_field(&obj, "chunk_method")?.unwrap_or_default(), 
273            access,
274        })
275    }
276}
277
278impl JsonCodec<UtilBuildFileOutputResponse> for UtilBuildFileOutputResponse {
279    fn encode_json(&self) -> Map<String, Value> {
280        let mut obj = Map::new();
281        JsonCodecHelper::encode_string_field(&mut obj, "object_id", &self.object_id);
282        JsonCodecHelper::encode_string_field(
283            &mut obj,
284            "object_raw",
285            &self.object_raw.to_hex().unwrap(),
286        );
287        obj
288    }
289
290    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<UtilBuildFileOutputResponse> {
291        Ok(Self {
292            object_id: JsonCodecHelper::decode_string_field(obj, "object_id")?,
293            object_raw: Vec::<u8>::clone_from_hex(
294                JsonCodecHelper::decode_string_field::<String>(obj, "object_raw")?.as_str(),
295                &mut Vec::new(),
296            )?,
297        })
298    }
299}
300
301impl JsonCodec<UtilBuildDirFromObjectMapOutputRequest> for UtilBuildDirFromObjectMapOutputRequest {
302    fn encode_json(&self) -> Map<String, Value> {
303        let mut obj = Map::new();
304        JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
305        JsonCodecHelper::encode_string_field(&mut obj, "object_map_id", &self.object_map_id);
306        JsonCodecHelper::encode_number_field(&mut obj, "dir_type", self.dir_type as u16);
307        obj
308    }
309
310    fn decode_json(
311        obj: &Map<String, Value>,
312    ) -> BuckyResult<UtilBuildDirFromObjectMapOutputRequest> {
313        let common: UtilOutputRequestCommon = JsonCodecHelper::decode_field(obj, "common")?;
314        Ok(Self {
315            common,
316            object_map_id: JsonCodecHelper::decode_string_field(obj, "object_map_id")?,
317            dir_type: BuildDirType::try_from(JsonCodecHelper::decode_int_field::<u16>(
318                obj, "dir_type",
319            )?)?,
320        })
321    }
322}
323
324impl JsonCodec<UtilBuildDirFromObjectMapOutputResponse>
325    for UtilBuildDirFromObjectMapOutputResponse
326{
327    fn encode_json(&self) -> Map<String, Value> {
328        let mut obj = Map::new();
329        JsonCodecHelper::encode_string_field(&mut obj, "object_id", &self.object_id);
330        obj
331    }
332
333    fn decode_json(
334        obj: &Map<String, Value>,
335    ) -> BuckyResult<UtilBuildDirFromObjectMapOutputResponse> {
336        Ok(Self {
337            object_id: JsonCodecHelper::decode_string_field(obj, "object_id")?,
338        })
339    }
340}