1use std::borrow::Cow;
4
5use base64::{Engine, engine::GeneralPurpose, prelude::BASE64_STANDARD_NO_PAD};
6use serde::{Deserialize, Deserializer, Serializer, de};
7
8const BASE64: GeneralPurpose = BASE64_STANDARD_NO_PAD;
9
10pub fn serialize<S>(bytes: &Option<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
12where
13 S: Serializer,
14{
15 match bytes {
16 Some(bytes) => serializer.serialize_str(&BASE64.encode(bytes)),
17 None => serializer.serialize_none(),
18 }
19}
20
21pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Vec<u8>>, D::Error>
23where
24 D: Deserializer<'de>,
25{
26 match Option::<Cow<str>>::deserialize(deserializer)? {
27 Some(s) => Ok(Some(BASE64.decode(s.as_ref()).map_err(de::Error::custom)?)),
28 None => Ok(None),
29 }
30}