micromegas_transit/
uuid_utils.rs1use serde::Deserialize;
2use serde::de::Error;
3use uuid::Uuid;
4
5pub fn uuid_from_string<'de, D>(deserializer: D) -> Result<Uuid, D::Error>
7where
8 D: serde::Deserializer<'de>,
9{
10 let s: String = Deserialize::deserialize(deserializer)?;
11 Uuid::parse_str(&s).map_err(D::Error::custom)
12}
13
14pub fn opt_uuid_from_string<'de, D>(deserializer: D) -> Result<Option<Uuid>, D::Error>
16where
17 D: serde::Deserializer<'de>,
18{
19 let opt_s: Option<String> = Deserialize::deserialize(deserializer)?;
20 if let Some(s) = opt_s {
21 if s.is_empty() {
22 Ok(None)
23 } else {
24 Uuid::parse_str(&s).map(Some).map_err(D::Error::custom)
25 }
26 } else {
27 Ok(None)
28 }
29}
30
31pub fn uuid_to_string<S>(value: &uuid::Uuid, serializer: S) -> Result<S::Ok, S::Error>
33where
34 S: serde::Serializer,
35{
36 serializer.serialize_str(&value.to_string())
37}
38
39pub fn opt_uuid_to_string<S>(value: &Option<uuid::Uuid>, serializer: S) -> Result<S::Ok, S::Error>
41where
42 S: serde::Serializer,
43{
44 if let Some(v) = value {
45 serializer.serialize_str(&v.to_string())
46 } else {
47 serializer.serialize_str("")
48 }
49}
50
51pub fn parse_optional_uuid(s: &str) -> Result<Option<Uuid>, uuid::Error> {
53 if s.is_empty() {
54 Ok(None)
55 } else {
56 Uuid::parse_str(s).map(Some)
57 }
58}