]> git.proxmox.com Git - proxmox.git/commitdiff
Uuid: implement Serlialize/Deserialize
authorDietmar Maurer <dietmar@proxmox.com>
Sun, 2 Aug 2020 09:49:36 +0000 (11:49 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Sun, 2 Aug 2020 09:50:26 +0000 (11:50 +0200)
proxmox/src/tools/serde.rs

index d6a5b7714db57c3a45b197a473ea63a092c2589f..f9c7e497480f3102407934e5414bb64cd6f5c354 100644 (file)
@@ -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<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+    where
+        S: Serializer,
+    {
+        serializer.serialize_str(&format!("{}", self))
+    }
+}
+
+impl<'de> Deserialize<'de> for Uuid {
+    fn deserialize<D>(deserializer: D) -> Result<Uuid, D::Error>
+    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()))
+        })
+    }
+}