hyperion/serde/
base64.rs

1//! Base64 deserialization of Vec<u8>
2
3use std::fmt;
4
5use base64::Engine;
6
7/// Serde visitor for deserializing Base64-encoded values
8struct Base64Visitor;
9
10impl<'a> serde::de::Visitor<'a> for Base64Visitor {
11    type Value = Vec<u8>;
12
13    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
14        formatter.write_str("base64 image")
15    }
16
17    fn visit_str<A>(self, string: &str) -> Result<Self::Value, A>
18    where
19        A: serde::de::Error,
20    {
21        base64::engine::general_purpose::STANDARD_NO_PAD
22            .decode(string)
23            .map_err(|err| serde::de::Error::custom(err.to_string()))
24    }
25}
26
27/// Decode a base64-encoded value
28///
29/// # Parameters
30///
31/// `deserializer`: Serde deserializer
32pub fn from_base64<'de, D>(deserializer: D) -> std::result::Result<Vec<u8>, D::Error>
33where
34    D: serde::Deserializer<'de>,
35{
36    deserializer.deserialize_str(Base64Visitor {})
37}