wolf_graph/details/
data.rs1use base64::prelude::*;
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, PartialEq, Default)]
10pub struct Data(pub Vec<u8>);
11
12impl Data {
13 pub fn new(data: impl Into<Vec<u8>>) -> Self {
14 Data(data.into())
15 }
16}
17
18impl<T: AsRef<[u8]>> From<T> for Data {
19 fn from(data: T) -> Self {
20 Data(data.as_ref().to_vec())
21 }
22}
23
24#[cfg(feature = "serde")]
25impl Serialize for Data {
26 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
27 where
28 S: serde::ser::Serializer,
29 {
30 let encoded = BASE64_STANDARD.encode(&self.0);
31 serializer.serialize_str(&encoded)
32 }
33}
34
35#[cfg(feature = "serde")]
36impl<'de> Deserialize<'de> for Data {
37 fn deserialize<D>(deserializer: D) -> Result<Data, D::Error>
38 where
39 D: serde::de::Deserializer<'de>,
40 {
41 let encoded = String::deserialize(deserializer)?;
42 let decoded = BASE64_STANDARD.decode(encoded).map_err(serde::de::Error::custom)?;
43 Ok(Data(decoded))
44 }
45}