mirror of
https://github.com/lifegpc/msg-tool.git
synced 2026-06-09 06:18:46 +08:00
46 lines
1.1 KiB
Rust
46 lines
1.1 KiB
Rust
use base64::Engine;
|
|
use serde::{Deserialize, Serialize};
|
|
use std::ops::{Deref, DerefMut};
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct Base64Bytes {
|
|
pub bytes: Vec<u8>,
|
|
}
|
|
|
|
impl Deref for Base64Bytes {
|
|
type Target = Vec<u8>;
|
|
|
|
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<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
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<D>(deserializer: D) -> Result<Self, D::Error>
|
|
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 })
|
|
}
|
|
}
|