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}