diff --git a/proxmox/src/tools/serde.rs b/proxmox/src/tools/serde.rs index d6a5b771..f9c7e497 100644 --- a/proxmox/src/tools/serde.rs +++ b/proxmox/src/tools/serde.rs @@ -140,3 +140,27 @@ pub mod string_as_base64 { }) } } + +use crate::tools::uuid::Uuid; +use ::serde::{Deserialize, Serialize, Serializer, Deserializer}; + +impl Serialize for Uuid { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_str(&format!("{}", self)) + } +} + +impl<'de> Deserialize<'de> for Uuid { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + use serde::de::Error; + String::deserialize(deserializer).and_then(|string| { + Uuid::parse_str(&string).map_err(|err| Error::custom(err.to_string())) + }) + } +}