use crate::entity::Entity; use serde::{de::Visitor, Deserialize, Serialize, Serializer}; impl Serialize for Entity { fn serialize(&self, serializer: S) -> Result where S: Serializer, { serializer.serialize_u32(self.id()) } } impl<'de> Deserialize<'de> for Entity { fn deserialize(deserializer: D) -> Result where D: serde::Deserializer<'de>, { deserializer.deserialize_u32(EntityVisitor) } } struct EntityVisitor; impl<'de> Visitor<'de> for EntityVisitor { type Value = Entity; fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { formatter.write_str("expected Entity") } fn visit_u32(self, v: u32) -> Result where E: serde::de::Error, { Ok(Entity::from_raw(v)) } }