1 //! Module for use with `#[serde(with = "...")]` to serialize a [`Uuid`]
2 //! as a `[u8; 16]`.
3 //!
4 //! [`Uuid`]: ../../struct.Uuid.html
5 
6 /// Serializer for a [`Uuid`] into a `[u8; 16]`
7 ///
8 /// [`Uuid`]: ../../struct.Uuid.html
serialize<S>(u: &crate::Uuid, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer,9 pub fn serialize<S>(u: &crate::Uuid, serializer: S) -> Result<S::Ok, S::Error>
10 where
11     S: serde::Serializer,
12 {
13     serde::Serialize::serialize(u.as_bytes(), serializer)
14 }
15 
16 /// Deserializer from a `[u8; 16]` into a [`Uuid`]
17 ///
18 /// [`Uuid`]: ../../struct.Uuid.html
deserialize<'de, D>(deserializer: D) -> Result<crate::Uuid, D::Error> where D: serde::Deserializer<'de>,19 pub fn deserialize<'de, D>(deserializer: D) -> Result<crate::Uuid, D::Error>
20 where
21     D: serde::Deserializer<'de>,
22 {
23     let bytes: [u8; 16] = serde::Deserialize::deserialize(deserializer)?;
24 
25     Ok(crate::Uuid::from_bytes(bytes))
26 }
27 
28 #[cfg(test)]
29 mod tests {
30 
31     use serde_test;
32 
33     #[test]
test_serialize_compact()34     fn test_serialize_compact() {
35         #[derive(
36             serde_derive::Serialize, Debug, serde_derive::Deserialize, PartialEq,
37         )]
38         struct UuidContainer {
39             #[serde(with = "super")]
40             u: crate::Uuid,
41         }
42         use serde_test::Configure;
43 
44         let uuid_bytes = b"F9168C5E-CEB2-4F";
45         let container = UuidContainer {
46             u: crate::Uuid::from_slice(uuid_bytes).unwrap(),
47         };
48 
49         // more complex because of the struct wrapping the actual UUID
50         // serialization
51         serde_test::assert_tokens(
52             &container.compact(),
53             &[
54                 serde_test::Token::Struct {
55                     name: "UuidContainer",
56                     len: 1,
57                 },
58                 serde_test::Token::Str("u"),
59                 serde_test::Token::Tuple { len: 16 },
60                 serde_test::Token::U8(uuid_bytes[0]),
61                 serde_test::Token::U8(uuid_bytes[1]),
62                 serde_test::Token::U8(uuid_bytes[2]),
63                 serde_test::Token::U8(uuid_bytes[3]),
64                 serde_test::Token::U8(uuid_bytes[4]),
65                 serde_test::Token::U8(uuid_bytes[5]),
66                 serde_test::Token::U8(uuid_bytes[6]),
67                 serde_test::Token::U8(uuid_bytes[7]),
68                 serde_test::Token::U8(uuid_bytes[8]),
69                 serde_test::Token::U8(uuid_bytes[9]),
70                 serde_test::Token::U8(uuid_bytes[10]),
71                 serde_test::Token::U8(uuid_bytes[11]),
72                 serde_test::Token::U8(uuid_bytes[12]),
73                 serde_test::Token::U8(uuid_bytes[13]),
74                 serde_test::Token::U8(uuid_bytes[14]),
75                 serde_test::Token::U8(uuid_bytes[15]),
76                 serde_test::Token::TupleEnd,
77                 serde_test::Token::StructEnd,
78             ],
79         )
80     }
81 }
82