1use std::fmt;
4
5use base64::Engine;
6
7struct 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
27pub 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}