1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
extern crate rustc_serialize; extern crate std; use self::std::prelude::v1::*; use self::rustc_serialize::{Encoder, Encodable, Decoder, Decodable}; use Uuid; impl Encodable for Uuid { fn encode<E: Encoder>(&self, e: &mut E) -> Result<(), E::Error> { e.emit_str(&self.hyphenated().to_string()) } } impl Decodable for Uuid { fn decode<D: Decoder>(d: &mut D) -> Result<Uuid, D::Error> { let string = try!(d.read_str()); string.parse::<Uuid>().map_err(|err| d.error(&err.to_string())) } } #[cfg(test)] mod tests { use super::rustc_serialize::json; use Uuid; #[test] fn test_serialize_round_trip() { let u = Uuid::parse_str("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4").unwrap(); let s = json::encode(&u).unwrap(); let u2 = json::decode(&s).unwrap(); assert_eq!(u, u2); } }