cyfs_lib/crypto/
input_request_codec.rs

1use super::input_request::*;
2use cyfs_base::*;
3
4use serde_json::{Map, Value};
5
6impl JsonCodec<CryptoInputRequestCommon> for CryptoInputRequestCommon {
7    fn encode_json(&self) -> Map<String, Value> {
8        let mut obj = Map::new();
9
10        JsonCodecHelper::encode_option_string_field(&mut obj, "req_path", self.req_path.as_ref());
11        JsonCodecHelper::encode_field(&mut obj, "source", &self.source);
12        JsonCodecHelper::encode_option_string_field(&mut obj, "target", self.target.as_ref());
13        JsonCodecHelper::encode_number_field(&mut obj, "flags", self.flags);
14
15        obj
16    }
17
18    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<CryptoInputRequestCommon> {
19        Ok(Self {
20            req_path: JsonCodecHelper::decode_option_string_field(obj, "req_path")?,
21            source: JsonCodecHelper::decode_field(obj, "source")?,
22            target: JsonCodecHelper::decode_option_string_field(obj, "target")?,
23            flags: JsonCodecHelper::decode_int_field(obj, "flags")?,
24        })
25    }
26}
27
28// sign_object
29impl JsonCodec<CryptoSignObjectInputRequest> for CryptoSignObjectInputRequest {
30    fn encode_json(&self) -> Map<String, Value> {
31        let mut obj = Map::new();
32
33        JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
34        JsonCodecHelper::encode_field(&mut obj, "object", &self.object);
35        JsonCodecHelper::encode_number_field(&mut obj, "flags", self.flags);
36
37        obj
38    }
39
40    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<CryptoSignObjectInputRequest> {
41        Ok(Self {
42            common: JsonCodecHelper::decode_field(obj, "common")?,
43            object: JsonCodecHelper::decode_field(obj, "object")?,
44            flags: JsonCodecHelper::decode_int_field(obj, "flags")?,
45        })
46    }
47}
48
49impl JsonCodec<CryptoSignObjectInputResponse> for CryptoSignObjectInputResponse {
50    fn encode_json(&self) -> Map<String, Value> {
51        let mut obj = Map::new();
52
53        JsonCodecHelper::encode_string_field(&mut obj, "result", &self.result);
54        JsonCodecHelper::encode_option_field(&mut obj, "object", self.object.as_ref());
55
56        obj
57    }
58
59    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<CryptoSignObjectInputResponse> {
60        Ok(Self {
61            result: JsonCodecHelper::decode_string_field(obj, "result")?,
62            object: JsonCodecHelper::decode_option_field(obj, "object")?,
63        })
64    }
65}
66
67// verify_object
68impl JsonCodec<CryptoVerifyObjectInputRequest> for CryptoVerifyObjectInputRequest {
69    fn encode_json(&self) -> Map<String, Value> {
70        let mut obj = Map::new();
71
72        JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
73
74        JsonCodecHelper::encode_string_field(&mut obj, "sign_type", &self.sign_type);
75
76        JsonCodecHelper::encode_field(&mut obj, "object", &self.object);
77
78        JsonCodecHelper::encode_field(&mut obj, "sign_object", &self.sign_object);
79
80        obj
81    }
82
83    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<CryptoVerifyObjectInputRequest> {
84        Ok(Self {
85            common: JsonCodecHelper::decode_field(obj, "common")?,
86            sign_type: JsonCodecHelper::decode_string_field(obj, "sign_type")?,
87            object: JsonCodecHelper::decode_field(obj, "object")?,
88            sign_object: JsonCodecHelper::decode_field(obj, "sign_object")?,
89        })
90    }
91}
92
93// encrypt_data
94impl JsonCodec<Self> for CryptoEncryptDataInputRequest {
95    fn encode_json(&self) -> Map<String, Value> {
96        let mut obj = Map::new();
97
98        JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
99
100        JsonCodecHelper::encode_string_field(&mut obj, "encrypt_type", &self.encrypt_type);
101
102        if let Some(data) = &self.data {
103            JsonCodecHelper::encode_string_field_2(&mut obj, "data", hex::encode(data));
104        }
105
106        JsonCodecHelper::encode_number_field(&mut obj, "flags", self.flags);
107
108        obj
109    }
110
111    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
112        let s: Option<String> = JsonCodecHelper::decode_option_string_field(obj, "data")?;
113        let data = match s {
114            Some(s) => Some(hex::decode(&s).map_err(|e| {
115                let msg = format!("invalid encrypt data string: {}, {}", s, e);
116                error!("{}", msg);
117                BuckyError::new(BuckyErrorCode::InvalidFormat, msg)
118            })?),
119            None => None,
120        };
121
122        Ok(Self {
123            common: JsonCodecHelper::decode_field(obj, "common")?,
124            encrypt_type: JsonCodecHelper::decode_string_field(obj, "encrypt_type")?,
125            data,
126            flags: JsonCodecHelper::decode_int_field(obj, "flags")?,
127        })
128    }
129}
130
131impl JsonCodec<Self> for CryptoEncryptDataInputResponse {
132    fn encode_json(&self) -> Map<String, Value> {
133        let mut obj = Map::new();
134
135        JsonCodecHelper::encode_option_string_field(&mut obj, "aes_key", self.aes_key.as_ref());
136
137        JsonCodecHelper::encode_string_field_2(&mut obj, "data", hex::encode(&self.result));
138
139        obj
140    }
141
142    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
143        let s: String = JsonCodecHelper::decode_string_field(obj, "data")?;
144        let result = hex::decode(&s).map_err(|e| {
145            let msg = format!("invalid encrypt data result string: {:?}, {}", s, e);
146            error!("{}", msg);
147            BuckyError::new(BuckyErrorCode::InvalidFormat, msg)
148        })?;
149
150        Ok(Self {
151            aes_key: JsonCodecHelper::decode_option_string_field(obj, "aes_key")?,
152            result,
153        })
154    }
155}
156
157
158// decrypt_data
159impl JsonCodec<Self> for CryptoDecryptDataInputRequest {
160    fn encode_json(&self) -> Map<String, Value> {
161        let mut obj = Map::new();
162
163        JsonCodecHelper::encode_field(&mut obj, "common", &self.common);
164
165        JsonCodecHelper::encode_string_field(&mut obj, "decrypt_type", &self.decrypt_type);
166
167        JsonCodecHelper::encode_string_field_2(&mut obj, "data", hex::encode(&self.data));
168
169        JsonCodecHelper::encode_number_field(&mut obj, "flags", self.flags);
170
171        obj
172    }
173
174    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
175        let s: String = JsonCodecHelper::decode_string_field(obj, "data")?;
176        let data = hex::decode(&s).map_err(|e| {
177                let msg = format!("invalid encrypt data string: {}, {}", s, e);
178                error!("{}", msg);
179                BuckyError::new(BuckyErrorCode::InvalidFormat, msg)
180            })?;
181
182        Ok(Self {
183            common: JsonCodecHelper::decode_field(obj, "common")?,
184            decrypt_type: JsonCodecHelper::decode_string_field(obj, "decrypt_type")?,
185            data,
186            flags: JsonCodecHelper::decode_int_field(obj, "flags")?,
187        })
188    }
189}
190
191impl JsonCodec<Self> for CryptoDecryptDataInputResponse {
192    fn encode_json(&self) -> Map<String, Value> {
193        let mut obj = Map::new();
194
195        JsonCodecHelper::encode_string_field(&mut obj, "result", &self.result);
196        JsonCodecHelper::encode_string_field_2(&mut obj, "data", hex::encode(&self.data));
197
198        obj
199    }
200
201    fn decode_json(obj: &Map<String, Value>) -> BuckyResult<Self> {
202        let s: String = JsonCodecHelper::decode_string_field(obj, "data")?;
203        let data = hex::decode(&s).map_err(|e| {
204            let msg = format!("invalid decrypt data result string: {}, {}", s, e);
205            error!("{}", msg);
206            BuckyError::new(BuckyErrorCode::InvalidFormat, msg)
207        })?;
208
209        Ok(Self {
210            result: JsonCodecHelper::decode_string_field(obj, "result")?,
211            data,
212        })
213    }
214}