|  | //! Module for use with `#[serde(with = "...")]` to serialize a [`Uuid`] | 
|  | //! as a `[u8; 16] | 
|  | //! | 
|  | //! [`Uuid`]: ../../struct.Uuid.html | 
|  |  | 
|  | use serde::{Deserialize, Deserializer, Serialize, Serializer}; | 
|  |  | 
|  | use prelude::*; | 
|  |  | 
|  | /// Serializer for a [`Uuid`] into a `[u8; 16]` | 
|  | /// | 
|  | /// [`Uuid`]: ../../struct.Uuid.html | 
|  | pub fn serialize<S: Serializer>( | 
|  | u: &Uuid, | 
|  | serializer: S, | 
|  | ) -> Result<S::Ok, S::Error> { | 
|  | u.as_bytes().serialize(serializer) | 
|  | } | 
|  |  | 
|  | /// Deserializer from a `[u8; 16]` into a [`Uuid`] | 
|  | /// | 
|  | /// [`Uuid`]: ../../struct.Uuid.html | 
|  | pub fn deserialize<'de, D: Deserializer<'de>>( | 
|  | deserializer: D, | 
|  | ) -> Result<Uuid, D::Error> { | 
|  | let bytes = <[u8; 16]>::deserialize(deserializer)?; | 
|  |  | 
|  | Ok(Uuid::from_bytes(bytes)) | 
|  | } | 
|  |  | 
|  | #[cfg(test)] | 
|  | mod tests { | 
|  | use serde_test; | 
|  |  | 
|  | use prelude::*; | 
|  |  | 
|  | #[derive(Serialize, Debug, Deserialize, PartialEq)] | 
|  | struct UuidContainer { | 
|  | #[serde(with = "super")] | 
|  | u: Uuid, | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn test_serialize_compact() { | 
|  | use serde_test::Configure; | 
|  |  | 
|  | let uuid_bytes = b"F9168C5E-CEB2-4F"; | 
|  | let container = UuidContainer { | 
|  | u: Uuid::from_slice(uuid_bytes).unwrap(), | 
|  | }; | 
|  |  | 
|  | // more complex because of the struct wrapping the actual UUID | 
|  | // serialization | 
|  | serde_test::assert_tokens( | 
|  | &container.compact(), | 
|  | &[ | 
|  | serde_test::Token::Struct { | 
|  | name: "UuidContainer", | 
|  | len: 1, | 
|  | }, | 
|  | serde_test::Token::Str("u"), | 
|  | serde_test::Token::Tuple { len: 16 }, | 
|  | serde_test::Token::U8(uuid_bytes[0]), | 
|  | serde_test::Token::U8(uuid_bytes[1]), | 
|  | serde_test::Token::U8(uuid_bytes[2]), | 
|  | serde_test::Token::U8(uuid_bytes[3]), | 
|  | serde_test::Token::U8(uuid_bytes[4]), | 
|  | serde_test::Token::U8(uuid_bytes[5]), | 
|  | serde_test::Token::U8(uuid_bytes[6]), | 
|  | serde_test::Token::U8(uuid_bytes[7]), | 
|  | serde_test::Token::U8(uuid_bytes[8]), | 
|  | serde_test::Token::U8(uuid_bytes[9]), | 
|  | serde_test::Token::U8(uuid_bytes[10]), | 
|  | serde_test::Token::U8(uuid_bytes[11]), | 
|  | serde_test::Token::U8(uuid_bytes[12]), | 
|  | serde_test::Token::U8(uuid_bytes[13]), | 
|  | serde_test::Token::U8(uuid_bytes[14]), | 
|  | serde_test::Token::U8(uuid_bytes[15]), | 
|  | serde_test::Token::TupleEnd, | 
|  | serde_test::Token::StructEnd, | 
|  | ], | 
|  | ) | 
|  | } | 
|  | } |