auto merge of #9846 : cmr/rust/serialize_uuid, r=alexcrichton
This commit is contained in:
commit
6c08cc2db4
@ -66,6 +66,8 @@ use std::rand::Rng;
|
||||
use std::cmp::Eq;
|
||||
use std::cast::{transmute,transmute_copy};
|
||||
|
||||
use serialize::{Encoder, Encodable, Decoder, Decodable};
|
||||
|
||||
/// A 128-bit (16 byte) buffer containing the ID
|
||||
pub type UuidBytes = [u8, ..16];
|
||||
|
||||
@ -486,6 +488,21 @@ impl TotalEq for Uuid {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME #9845: Test these more thoroughly
|
||||
impl<T: Encoder> Encodable<T> for Uuid {
|
||||
/// Encode a UUID as a hypenated string
|
||||
fn encode(&self, e: &mut T) {
|
||||
e.emit_str(self.to_hyphenated_str());
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Decoder> Decodable<T> for Uuid {
|
||||
/// Decode a UUID from a string
|
||||
fn decode(d: &mut T) -> Uuid {
|
||||
from_str(d.read_str()).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
/// Generates a random instance of UUID (V4 conformant)
|
||||
impl rand::Rand for Uuid {
|
||||
#[inline]
|
||||
@ -770,6 +787,20 @@ mod test {
|
||||
assert!(ub.len() == 16);
|
||||
assert!(! ub.iter().all(|&b| b == 0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_serialize_round_trip() {
|
||||
use std;
|
||||
use ebml;
|
||||
use serialize::{Encodable, Decodable};
|
||||
|
||||
let u = Uuid::new_v4();
|
||||
let bytes = do std::io::with_bytes_writer |wr| {
|
||||
u.encode(&mut ebml::writer::Encoder(wr));
|
||||
};
|
||||
let u2 = Decodable::decode(&mut ebml::reader::Decoder(ebml::reader::Doc(@bytes)));
|
||||
assert_eq!(u, u2);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
Loading…
x
Reference in New Issue
Block a user