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 From<Vec<u8>> for Base64Bytes {
25 fn from(value: Vec<u8>) -> Self {
26 Self { bytes: value }
27 }
28}
29
30impl Serialize for Base64Bytes {
31 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
32 where
33 S: serde::Serializer,
34 {
35 let encoded = base64::engine::general_purpose::STANDARD.encode(&self.bytes);
36 serializer.serialize_str(&encoded)
37 }
38}
39
40impl<'de> Deserialize<'de> for Base64Bytes {
41 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
42 where
43 D: serde::Deserializer<'de>,
44 {
45 let s: &str = Deserialize::deserialize(deserializer)?;
46 let decoded = base64::engine::general_purpose::STANDARD
47 .decode(s)
48 .map_err(serde::de::Error::custom)?;
49 Ok(Base64Bytes { bytes: decoded })
50 }
51}