rustack_kms_model/
blob.rs1use base64::{Engine, engine::general_purpose::STANDARD};
8use serde::{Deserialize, Deserializer, Serialize, Serializer};
9
10pub fn serialize<S: Serializer>(bytes: &bytes::Bytes, s: S) -> Result<S::Ok, S::Error> {
12 STANDARD.encode(bytes.as_ref()).serialize(s)
13}
14
15pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<bytes::Bytes, D::Error> {
17 let s = String::deserialize(d)?;
18 STANDARD
19 .decode(&s)
20 .map(bytes::Bytes::from)
21 .map_err(serde::de::Error::custom)
22}
23
24pub mod option {
26 use super::{Deserialize, Deserializer, Engine, STANDARD, Serialize, Serializer};
27
28 pub fn serialize<S: Serializer>(bytes: &Option<bytes::Bytes>, s: S) -> Result<S::Ok, S::Error> {
30 match bytes {
31 Some(b) => STANDARD.encode(b.as_ref()).serialize(s),
32 None => s.serialize_none(),
33 }
34 }
35
36 pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Option<bytes::Bytes>, D::Error> {
38 let opt: Option<String> = Option::deserialize(d)?;
39 match opt {
40 Some(s) => STANDARD
41 .decode(&s)
42 .map(|v| Some(bytes::Bytes::from(v)))
43 .map_err(serde::de::Error::custom),
44 None => Ok(None),
45 }
46 }
47}