use base64::Engine; use serde::{Deserialize, Serialize}; use std::ops::{Deref, DerefMut}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct Base64Bytes { pub bytes: Vec, } impl Deref for Base64Bytes { type Target = Vec; fn deref(&self) -> &Self::Target { &self.bytes } } impl DerefMut for Base64Bytes { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.bytes } } impl Serialize for Base64Bytes { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer, { let encoded = base64::engine::general_purpose::STANDARD.encode(&self.bytes); serializer.serialize_str(&encoded) } } impl<'de> Deserialize<'de> for Base64Bytes { fn deserialize(deserializer: D) -> Result where D: serde::Deserializer<'de>, { let s: &str = Deserialize::deserialize(deserializer)?; let decoded = base64::engine::general_purpose::STANDARD .decode(s) .map_err(serde::de::Error::custom)?; Ok(Base64Bytes { bytes: decoded }) } }