pub mod mime_serialize { use mime::Mime; use serde::{ de::{self, Unexpected, Visitor}, Deserializer, Serializer, }; pub fn serialize(data: &Mime, serializer: S) -> Result where S: Serializer, { serializer.serialize_str(data.as_ref()) } pub fn deserialize<'de, D>(deserializer: D) -> Result where D: Deserializer<'de>, { struct Vis; impl<'de> Visitor<'de> for Vis { type Value = Mime; fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { formatter.write_str("a MIME type") } fn visit_str(self, v: &str) -> Result where E: serde::de::Error, { v.parse() .map_err(|_| de::Error::invalid_value(Unexpected::Str(v), &Vis)) } } deserializer.deserialize_str(Vis) } }