diff --git a/Cargo.toml b/Cargo.toml index 2f17f18..22edea6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,3 +2,6 @@ name = "libshire" version = "0.1.0" edition = "2021" + +[dependencies] +serde = { version = "1", optional = true } diff --git a/src/uuid.rs b/src/uuid.rs index ab2a1ae..e4e7b9c 100644 --- a/src/uuid.rs +++ b/src/uuid.rs @@ -138,6 +138,29 @@ impl fmt::Display for Uuid { } } +#[cfg(feature = "serde")] +impl serde::Serialize for Uuid { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer + { + // TODO: replace with a better string conversion function + serializer.serialize_str(&self.to_string()) + } +} + +#[cfg(feature = "serde")] +impl<'de> serde::Deserialize<'de> for Uuid { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de> + { + let s: &str = serde::Deserialize::deserialize(deserializer)?; + s.parse() + .map_err(serde::de::Error::custom) + } +} + #[derive(Debug)] pub enum ParseError { NotEnoughGroups(usize),