1use super::input_request::*;
2use crate::base::NDNDataRequestRange;
3use cyfs_base::*;
4
5use serde_json::{Map, Value};
6
7impl JsonCodec<NDNInputRequestCommon> for NDNInputRequestCommon {
8 fn encode_json(&self) -> Map<String, Value> {
9 let mut obj = Map::new();
10
11 JsonCodecHelper::encode_option_string_field(&mut obj, "req_path", self.req_path.as_ref());
12 JsonCodecHelper::encode_field(&mut obj, "source", &self.source);
13 JsonCodecHelper::encode_string_field(&mut obj, "level", &self.level);
14 JsonCodecHelper::encode_option_string_field(&mut obj, "target", self.target.as_ref());
15 JsonCodecHelper::encode_str_array_field(&mut obj, "referer_object", &self.referer_object);
16 JsonCodecHelper::encode_number_field(&mut obj, "flags", self.flags);
17
18 obj
19 }
20
21 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
22 Ok(Self {
23 req_path: JsonCodecHelper::decode_option_string_field(obj, "req_path")?,
24 source: JsonCodecHelper::decode_field(obj, "source")?,
25 level: JsonCodecHelper::decode_string_field(obj, "level")?,
26 referer_object: JsonCodecHelper::decode_str_array_field(obj, "referer_object")?,
27 target: JsonCodecHelper::decode_option_string_field(obj, "target")?,
28 flags: JsonCodecHelper::decode_int_field(obj, "flags")?,
29 user_data: None,
30 })
31 }
32}
33
34impl JsonCodec<NDNGetDataInputRequest> for NDNGetDataInputRequest {
36 fn encode_json(&self) -> Map<String, Value> {
37 let mut obj = Map::new();
38
39 JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
40 JsonCodecHelper::encode_string_field(&mut obj, "object_id", &self.object_id);
41 JsonCodecHelper::encode_string_field(&mut obj, "data_type", &self.data_type);
42
43 if let Some(range) = &self.range {
44 JsonCodecHelper::encode_string_field_2(&mut obj, "range", range.encode_string());
45 }
46
47 JsonCodecHelper::encode_option_string_field(
48 &mut obj,
49 "inner_path",
50 self.inner_path.as_ref(),
51 );
52
53 JsonCodecHelper::encode_option_string_field(
54 &mut obj,
55 "context",
56 self.context.as_ref(),
57 );
58
59 JsonCodecHelper::encode_option_string_field(
60 &mut obj,
61 "group",
62 self.group.as_ref(),
63 );
64
65 obj
66 }
67
68 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
69 let range = JsonCodecHelper::decode_option_string_field(obj, "range")?
70 .map(|s: String| NDNDataRequestRange::new_unparsed(s));
71
72 Ok(Self {
73 common: JsonCodecHelper::decode_field(obj, "common")?,
74 object_id: JsonCodecHelper::decode_string_field(obj, "object_id")?,
75 data_type: JsonCodecHelper::decode_string_field(obj, "data_type")?,
76 range,
77 inner_path: JsonCodecHelper::decode_option_string_field(obj, "inner_path")?,
78 context: JsonCodecHelper::decode_option_string_field(obj, "context")?,
79 group: JsonCodecHelper::decode_option_string_field(obj, "group")?,
80 })
81 }
82}
83
84impl JsonCodec<NDNGetDataInputResponse> for NDNGetDataInputResponse {
85 fn encode_json(&self) -> Map<String, Value> {
86 let mut obj = Map::new();
87
88 JsonCodecHelper::encode_string_field(&mut obj, "object_id", &self.object_id);
89 JsonCodecHelper::encode_option_string_field(&mut obj, "owner_id", self.owner_id.as_ref());
90 JsonCodecHelper::encode_option_number_field(
91 &mut obj,
92 "attr",
93 self.attr.as_ref().map(|v| v.flags()),
94 );
95 JsonCodecHelper::encode_option_string_field(&mut obj, "group", self.group.as_ref());
96 JsonCodecHelper::encode_option_field(&mut obj, "range", self.range.as_ref());
97 JsonCodecHelper::encode_string_field(&mut obj, "length", &self.length);
98
99 obj
100 }
101
102 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
103 let attr =
104 JsonCodecHelper::decode_option_int_field(obj, "attr")?.map(|v| Attributes::new(v));
105
106 let data = Box::new(async_std::io::Cursor::new(vec![]));
108
109 Ok(Self {
110 object_id: JsonCodecHelper::decode_string_field(obj, "object_id")?,
111 owner_id: JsonCodecHelper::decode_option_string_field(obj, "owner_id")?,
112 attr,
113 range: JsonCodecHelper::decode_option_field(obj, "range")?,
114 group: JsonCodecHelper::decode_option_string_field(obj, "group")?,
115 length: JsonCodecHelper::decode_int_field(obj, "length")?,
116 data,
117 })
118 }
119}
120
121impl JsonCodec<NDNPutDataInputRequest> for NDNPutDataInputRequest {
123 fn encode_json(&self) -> Map<String, Value> {
124 let mut obj = Map::new();
125
126 JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
127 JsonCodecHelper::encode_string_field(&mut obj, "object_id", &self.object_id);
128 JsonCodecHelper::encode_string_field(&mut obj, "data_type", &self.data_type);
129 JsonCodecHelper::encode_string_field(&mut obj, "length", &self.length);
130
131 obj
132 }
133
134 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
135 let data = Box::new(async_std::io::Cursor::new(vec![]));
137 Ok(Self {
138 common: JsonCodecHelper::decode_field(obj, "common")?,
139 object_id: JsonCodecHelper::decode_string_field(obj, "object_id")?,
140 data_type: JsonCodecHelper::decode_string_field(obj, "data_type")?,
141 length: JsonCodecHelper::decode_int_field(obj, "length")?,
142 data,
143 })
144 }
145}
146
147impl JsonCodec<NDNPutDataInputResponse> for NDNPutDataInputResponse {
148 fn encode_json(&self) -> Map<String, Value> {
149 let mut obj = Map::new();
150
151 JsonCodecHelper::encode_string_field(&mut obj, "result", &self.result);
152
153 obj
154 }
155
156 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
157 Ok(Self {
158 result: JsonCodecHelper::decode_string_field(obj, "result")?,
159 })
160 }
161}
162
163impl JsonCodec<NDNDeleteDataInputRequest> for NDNDeleteDataInputRequest {
165 fn encode_json(&self) -> Map<String, Value> {
166 let mut obj = Map::new();
167
168 JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
169 JsonCodecHelper::encode_string_field(&mut obj, "object_id", &self.object_id);
170 JsonCodecHelper::encode_option_string_field(
171 &mut obj,
172 "inner_path",
173 self.inner_path.as_ref(),
174 );
175
176 obj
177 }
178
179 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
180 Ok(Self {
181 common: JsonCodecHelper::decode_field(obj, "common")?,
182 object_id: JsonCodecHelper::decode_string_field(obj, "object_id")?,
183 inner_path: JsonCodecHelper::decode_option_string_field(obj, "inner_path")?,
184 })
185 }
186}
187
188impl JsonCodec<NDNDeleteDataInputResponse> for NDNDeleteDataInputResponse {
189 fn encode_json(&self) -> Map<String, Value> {
190 let mut obj = Map::new();
191
192 JsonCodecHelper::encode_string_field(&mut obj, "object_id", &self.object_id);
193
194 obj
195 }
196
197 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
198 Ok(Self {
199 object_id: JsonCodecHelper::decode_string_field(obj, "object_id")?,
200 })
201 }
202}
203
204impl JsonCodec<Self> for NDNQueryFileParam {
206 fn encode_json(&self) -> Map<String, Value> {
207 let mut obj = Map::new();
208
209 let (t, v) = self.to_key_pair();
210 JsonCodecHelper::encode_string_field(&mut obj, "type", t);
211 JsonCodecHelper::encode_string_field(&mut obj, "value", &v);
212
213 obj
214 }
215
216 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
217 let t: String = JsonCodecHelper::decode_string_field(obj, "type")?;
218 let value: String = JsonCodecHelper::decode_string_field(obj, "value")?;
219
220 Self::from_key_pair(&t, &value)
221 }
222}
223
224impl JsonCodec<Self> for NDNQueryFileInfo {
225 fn encode_json(&self) -> Map<String, Value> {
226 let mut obj = Map::new();
227
228 JsonCodecHelper::encode_string_field(&mut obj, "file_id", &self.file_id);
229 JsonCodecHelper::encode_string_field(&mut obj, "hash", &self.hash);
230 JsonCodecHelper::encode_string_field(&mut obj, "length", &self.length);
231 JsonCodecHelper::encode_number_field(&mut obj, "flags", self.flags);
232 JsonCodecHelper::encode_option_string_field(&mut obj, "owner", self.owner.as_ref());
233 JsonCodecHelper::encode_option_str_array_field(
234 &mut obj,
235 "quick_hash",
236 self.quick_hash.as_ref(),
237 );
238 JsonCodecHelper::encode_as_option_list(&mut obj, "ref_dirs", self.ref_dirs.as_ref());
239
240 obj
241 }
242
243 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
244 Ok(Self {
245 file_id: JsonCodecHelper::decode_string_field(obj, "file_id")?,
246 hash: JsonCodecHelper::decode_string_field(obj, "hash")?,
247 length: JsonCodecHelper::decode_string_field(obj, "length")?,
248 flags: JsonCodecHelper::decode_int_field(obj, "flags")?,
249
250 owner: JsonCodecHelper::decode_option_string_field(obj, "owner")?,
251 quick_hash: JsonCodecHelper::decode_option_str_array_field(obj, "quick_hash")?,
252 ref_dirs: JsonCodecHelper::decode_option_array_field(obj, "ref_dirs")?,
253 })
254 }
255}
256
257impl JsonCodec<Self> for NDNQueryFileInputResponse {
258 fn encode_json(&self) -> Map<String, Value> {
259 let mut obj = Map::new();
260
261 JsonCodecHelper::encode_as_list(&mut obj, "list", &self.list);
262
263 obj
264 }
265
266 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
267 Ok(Self {
268 list: JsonCodecHelper::decode_array_field(obj, "list")?,
269 })
270 }
271}