diff --git a/src/libextra/uuid.rs b/src/libextra/uuid.rs index 9e48c3e7a73ed..cf40a59a8c507 100644 --- a/src/libextra/uuid.rs +++ b/src/libextra/uuid.rs @@ -65,6 +65,7 @@ use std::rand; use std::rand::Rng; use std::cmp::Eq; use std::cast::{transmute,transmute_copy}; +use std::to_bytes::{IterBytes, Cb}; use serialize::{Encoder, Encodable, Decoder, Decodable}; @@ -104,6 +105,11 @@ pub struct Uuid { /// The 128-bit number stored in 16 bytes bytes: UuidBytes } +impl IterBytes for Uuid { + fn iter_bytes(&self, _: bool, f: Cb) -> bool { + f(self.bytes.slice_from(0)) + } +} /// A UUID stored as fields (identical to UUID, used only for conversions) struct UuidFields { @@ -796,6 +802,17 @@ mod test { let u2 = Decodable::decode(&mut ebml::reader::Decoder(doc)); assert_eq!(u, u2); } + + #[test] + fn test_iterbytes_impl_for_uuid() { + use std::hashmap::HashSet; + let mut set = HashSet::new(); + let id1 = Uuid::new_v4(); + let id2 = Uuid::new_v4(); + set.insert(id1); + assert!(set.contains(&id1)); + assert!(!set.contains(&id2)); + } } #[cfg(test)]