use std::{ any, fmt::{self, Formatter}, }; use serde::{ de::{Error, Visitor}, Deserialize, Deserializer, Serialize, Serializer, }; use super::name::Name; impl Serialize for Name { fn serialize(&self, serializer: S) -> Result { serializer.serialize_str(self.as_str()) } } impl<'de> Deserialize<'de> for Name { fn deserialize>(deserializer: D) -> Result { deserializer.deserialize_str(EntityVisitor) } } struct EntityVisitor; impl<'de> Visitor<'de> for EntityVisitor { type Value = Name; fn expecting(&self, formatter: &mut Formatter) -> fmt::Result { formatter.write_str(any::type_name::()) } fn visit_str(self, v: &str) -> Result { Ok(Name::new(v.to_string())) } fn visit_string(self, v: String) -> Result { Ok(Name::new(v)) } }