/rust/registry/src/index.crates.io-1949cf8c6b5b557f/uuid-0.8.2/src/adapter/compact.rs
Line | Count | Source |
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 |
9 | 0 | pub fn serialize<S>(u: &crate::Uuid, serializer: S) -> Result<S::Ok, S::Error> |
10 | 0 | where |
11 | 0 | S: serde::Serializer, |
12 | | { |
13 | 0 | serde::Serialize::serialize(u.as_bytes(), serializer) |
14 | 0 | } |
15 | | |
16 | | /// Deserializer from a `[u8; 16]` into a [`Uuid`] |
17 | | /// |
18 | | /// [`Uuid`]: ../../struct.Uuid.html |
19 | 0 | pub fn deserialize<'de, D>(deserializer: D) -> Result<crate::Uuid, D::Error> |
20 | 0 | where |
21 | 0 | D: serde::Deserializer<'de>, |
22 | | { |
23 | 0 | let bytes: [u8; 16] = serde::Deserialize::deserialize(deserializer)?; |
24 | | |
25 | 0 | Ok(crate::Uuid::from_bytes(bytes)) |
26 | 0 | } |
27 | | |
28 | | #[cfg(test)] |
29 | | mod tests { |
30 | | |
31 | | use serde_test; |
32 | | |
33 | | #[test] |
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 | | } |