cyfs_lib/ndn/
input_request_codec.rs

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
34// get_data
35impl 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        // 现在事件不支持data的返回和修改
107        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
121// put_data
122impl 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        // 现在事件不支持data的返回和修改
136        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
163// delete_data
164impl 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
204// query file
205impl 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}