msg_tool\utils/
serde_base64bytes.rs1use base64::Engine;
2use serde::{Deserialize, Serialize};
3use std::ops::{Deref, DerefMut};
4
5#[derive(Clone, Debug, PartialEq, Eq)]
6pub struct Base64Bytes {
7 pub bytes: Vec<u8>,
8}
9
10impl Deref for Base64Bytes {
11 type Target = Vec<u8>;
12
13 fn deref(&self) -> &Self::Target {
14 &self.bytes
15 }
16}
17
18impl DerefMut for Base64Bytes {
19 fn deref_mut(&mut self) -> &mut Self::Target {
20 &mut self.bytes
21 }
22}
23
24impl Serialize for Base64Bytes {
25 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
26 where
27 S: serde::Serializer,
28 {
29 let encoded = base64::engine::general_purpose::STANDARD.encode(&self.bytes);
30 serializer.serialize_str(&encoded)
31 }
32}
33
34impl<'de> Deserialize<'de> for Base64Bytes {
35 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
36 where
37 D: serde::Deserializer<'de>,
38 {
39 let s: &str = Deserialize::deserialize(deserializer)?;
40 let decoded = base64::engine::general_purpose::STANDARD
41 .decode(s)
42 .map_err(serde::de::Error::custom)?;
43 Ok(Base64Bytes { bytes: decoded })
44 }
45}