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