diff options
| author | bors <bors@rust-lang.org> | 2014-05-01 09:41:54 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-05-01 09:41:54 -0700 |
| commit | ee03529fa9c84471f0e24d749017ce88b7d2b81e (patch) | |
| tree | 29e4e0998dd17a3a894c20e762e32496fde8dbc4 | |
| parent | 239557de6de72748a5c7604081b202d53f7d9ac9 (diff) | |
| parent | fa6efedccf63c283d7b0916c304ee456d20ab97e (diff) | |
| download | rust-ee03529fa9c84471f0e24d749017ce88b7d2b81e.tar.gz rust-ee03529fa9c84471f0e24d749017ce88b7d2b81e.zip | |
auto merge of #13875 : hjr3/rust/serialize-strbuf, r=alexcrichton
- implement Encodable and Decodable for StrBuf - implement to_json for StrBuf
| -rw-r--r-- | src/libserialize/json.rs | 58 | ||||
| -rw-r--r-- | src/libserialize/serialize.rs | 12 |
2 files changed, 35 insertions, 35 deletions
diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index 189b8717d49..b87a02fcfd7 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -2205,6 +2205,10 @@ impl ToJson for ~str { fn to_json(&self) -> Json { String((*self).clone()) } } +impl ToJson for StrBuf { + fn to_json(&self) -> Json { String((*self).as_slice().into_owned()) } +} + impl<A:ToJson,B:ToJson> ToJson for (A, B) { fn to_json(&self) -> Json { match *self { @@ -2643,41 +2647,25 @@ mod tests { #[test] fn test_decode_str() { - let mut decoder = Decoder::new(from_str("\"\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "".to_owned()); - - let mut decoder = Decoder::new(from_str("\"foo\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "foo".to_owned()); - - let mut decoder = Decoder::new(from_str("\"\\\"\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "\"".to_owned()); - - let mut decoder = Decoder::new(from_str("\"\\b\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "\x08".to_owned()); - - let mut decoder = Decoder::new(from_str("\"\\n\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "\n".to_owned()); - - let mut decoder = Decoder::new(from_str("\"\\r\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "\r".to_owned()); - - let mut decoder = Decoder::new(from_str("\"\\t\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "\t".to_owned()); - - let mut decoder = Decoder::new(from_str("\"\\u12ab\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "\u12ab".to_owned()); - - let mut decoder = Decoder::new(from_str("\"\\uAB12\"").unwrap()); - let v: ~str = Decodable::decode(&mut decoder).unwrap(); - assert_eq!(v, "\uAB12".to_owned()); + let s = [("\"\"", ""), + ("\"foo\"", "foo"), + ("\"\\\"\"", "\""), + ("\"\\b\"", "\x08"), + ("\"\\n\"", "\n"), + ("\"\\r\"", "\r"), + ("\"\\t\"", "\t"), + ("\"\\u12ab\"", "\u12ab"), + ("\"\\uAB12\"", "\uAB12")]; + + for &(i, o) in s.iter() { + let mut decoder = Decoder::new(from_str(i).unwrap()); + let v: StrBuf = Decodable::decode(&mut decoder).unwrap(); + assert_eq!(v.as_slice(), o); + + let mut decoder = Decoder::new(from_str(i).unwrap()); + let v: ~str = Decodable::decode(&mut decoder).unwrap(); + assert_eq!(v, o.to_owned()); + } } #[test] diff --git a/src/libserialize/serialize.rs b/src/libserialize/serialize.rs index d82d45e89a2..9801a243efa 100644 --- a/src/libserialize/serialize.rs +++ b/src/libserialize/serialize.rs @@ -313,6 +313,18 @@ impl<E, D:Decoder<E>> Decodable<D, E> for ~str { } } +impl<E, S:Encoder<E>> Encodable<S, E> for StrBuf { + fn encode(&self, s: &mut S) -> Result<(), E> { + s.emit_str(self.as_slice()) + } +} + +impl<E, D:Decoder<E>> Decodable<D, E> for StrBuf { + fn decode(d: &mut D) -> Result<StrBuf, E> { + Ok(StrBuf::from_str(try!(d.read_str()))) + } +} + impl<E, S:Encoder<E>> Encodable<S, E> for f32 { fn encode(&self, s: &mut S) -> Result<(), E> { s.emit_f32(*self) |
