spin_serde/
base64.rs

1//! Base64 (de)serialization
2
3use 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
10/// Serializes to base64.
11pub 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
21/// Deserializes from base64.
22pub 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}