cyfs_lib/acl/handler/
request_codec.rs

1use super::super::AclAction;
2use super::request::*;
3use cyfs_base::*;
4
5use serde_json::{Map, Value};
6
7impl JsonCodec<AclAction> for AclAction {
8    fn encode_json(&self) -> Map<String, Value> {
9        let mut obj = Map::new();
10        JsonCodecHelper::encode_string_field(&mut obj, "direction", &self.direction);
11        JsonCodecHelper::encode_string_field(&mut obj, "operation", &self.operation);
12
13        obj
14    }
15
16    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
17        Ok(Self {
18            direction: JsonCodecHelper::decode_string_field(obj, "direction")?,
19            operation: JsonCodecHelper::decode_string_field(obj, "operation")?,
20        })
21    }
22}
23
24impl JsonCodec<AclHandlerRequest> for AclHandlerRequest {
25    fn encode_json(&self) -> Map<String, Value> {
26        let mut obj = Map::new();
27
28        JsonCodecHelper::encode_string_field(&mut obj, "protocol", &self.protocol);
29        JsonCodecHelper::encode_field(&mut obj, "action", &self.action);
30
31        JsonCodecHelper::encode_string_field(&mut obj, "device_id", &self.device_id);
32
33        JsonCodecHelper::encode_option_field(&mut obj, "object", self.object.as_ref());
34        
35        JsonCodecHelper::encode_option_string_field(
36            &mut obj,
37            "inner_path",
38            self.inner_path.as_ref(),
39        );
40
41        JsonCodecHelper::encode_option_string_field(&mut obj, "req_path", self.req_path.as_ref());
42        JsonCodecHelper::encode_string_field(&mut obj, "dec_id", &self.dec_id);
43        JsonCodecHelper::encode_option_str_array_field(&mut obj, "referer_object", self.referer_object.as_ref());
44
45        obj
46    }
47
48    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
49        Ok(Self {
50            protocol: JsonCodecHelper::decode_string_field(obj, "protocol")?,
51            action: JsonCodecHelper::decode_field(obj, "action")?,
52            device_id: JsonCodecHelper::decode_string_field(obj, "device_id")?,
53
54            object: JsonCodecHelper::decode_option_field(obj, "object")?,
55            inner_path: JsonCodecHelper::decode_option_string_field(obj, "inner_path")?,
56
57            req_path: JsonCodecHelper::decode_option_string_field(obj, "req_path")?,
58            dec_id: JsonCodecHelper::decode_string_field(obj, "dec_id")?,
59            referer_object: JsonCodecHelper::decode_option_str_array_field(obj, "referer_object")?,
60        })
61    }
62}
63
64
65impl JsonCodec<AclHandlerResponse> for AclHandlerResponse {
66    fn encode_json(&self) -> Map<String, Value> {
67        let mut obj = Map::new();
68        JsonCodecHelper::encode_string_field(&mut obj, "access", &self.access);
69
70        obj
71    }
72
73    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
74        Ok(Self {
75            access: JsonCodecHelper::decode_string_field(obj, "access")?,
76        })
77    }
78}