1use std::borrow::Cow;
4
5use base64::{engine::GeneralPurpose, prelude::BASE64_STANDARD_NO_PAD, Engine};
6use serde::{de, Deserialize, Deserializer, Serializer};
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}