use std::fmt;
use base64::Engine;
struct Base64Visitor;
impl<'a> serde::de::Visitor<'a> for Base64Visitor {
type Value = Vec<u8>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("base64 image")
}
fn visit_str<A>(self, string: &str) -> Result<Self::Value, A>
where
A: serde::de::Error,
{
base64::engine::general_purpose::STANDARD_NO_PAD
.decode(string)
.map_err(|err| serde::de::Error::custom(err.to_string()))
}
}
pub fn from_base64<'de, D>(deserializer: D) -> std::result::Result<Vec<u8>, D::Error>
where
D: serde::Deserializer<'de>,
{
deserializer.deserialize_str(Base64Visitor {})
}