diff options
Diffstat (limited to 'src/libserialize')
| -rw-r--r-- | src/libserialize/collection_impls.rs | 94 | ||||
| -rw-r--r-- | src/libserialize/json.rs | 12 | ||||
| -rw-r--r-- | src/libserialize/lib.rs | 1 | ||||
| -rw-r--r-- | src/libserialize/serialize.rs | 2 |
4 files changed, 91 insertions, 18 deletions
diff --git a/src/libserialize/collection_impls.rs b/src/libserialize/collection_impls.rs index f81edca8371..10cf02f85e8 100644 --- a/src/libserialize/collection_impls.rs +++ b/src/libserialize/collection_impls.rs @@ -12,16 +12,17 @@ use std::usize; use std::default::Default; -use std::hash::{Hash, Hasher}; +use std::hash::Hash; +#[cfg(stage0)] use std::hash::Hasher; use std::collections::hash_state::HashState; use {Decodable, Encodable, Decoder, Encoder}; -use std::collections::{DList, RingBuf, BTreeMap, BTreeSet, HashMap, HashSet, VecMap}; +use std::collections::{LinkedList, VecDeque, BTreeMap, BTreeSet, HashMap, HashSet, VecMap}; use collections::enum_set::{EnumSet, CLike}; impl< T: Encodable -> Encodable for DList<T> { +> Encodable for LinkedList<T> { fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> { s.emit_seq(self.len(), |s| { for (i, e) in self.iter().enumerate() { @@ -32,10 +33,10 @@ impl< } } -impl<T:Decodable> Decodable for DList<T> { - fn decode<D: Decoder>(d: &mut D) -> Result<DList<T>, D::Error> { +impl<T:Decodable> Decodable for LinkedList<T> { + fn decode<D: Decoder>(d: &mut D) -> Result<LinkedList<T>, D::Error> { d.read_seq(|d, len| { - let mut list = DList::new(); + let mut list = LinkedList::new(); for i in 0..len { list.push_back(try!(d.read_seq_elt(i, |d| Decodable::decode(d)))); } @@ -44,7 +45,7 @@ impl<T:Decodable> Decodable for DList<T> { } } -impl<T: Encodable> Encodable for RingBuf<T> { +impl<T: Encodable> Encodable for VecDeque<T> { fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> { s.emit_seq(self.len(), |s| { for (i, e) in self.iter().enumerate() { @@ -55,10 +56,10 @@ impl<T: Encodable> Encodable for RingBuf<T> { } } -impl<T:Decodable> Decodable for RingBuf<T> { - fn decode<D: Decoder>(d: &mut D) -> Result<RingBuf<T>, D::Error> { +impl<T:Decodable> Decodable for VecDeque<T> { + fn decode<D: Decoder>(d: &mut D) -> Result<VecDeque<T>, D::Error> { d.read_seq(|d, len| { - let mut deque: RingBuf<T> = RingBuf::new(); + let mut deque: VecDeque<T> = VecDeque::new(); for i in 0..len { deque.push_back(try!(d.read_seq_elt(i, |d| Decodable::decode(d)))); } @@ -157,6 +158,7 @@ impl< } } +#[cfg(stage0)] impl<K, V, S> Encodable for HashMap<K, V, S> where K: Encodable + Hash< <S as HashState>::Hasher> + Eq, V: Encodable, @@ -175,7 +177,26 @@ impl<K, V, S> Encodable for HashMap<K, V, S> }) } } +#[cfg(not(stage0))] +impl<K, V, S> Encodable for HashMap<K, V, S> + where K: Encodable + Hash + Eq, + V: Encodable, + S: HashState, +{ + fn encode<E: Encoder>(&self, e: &mut E) -> Result<(), E::Error> { + e.emit_map(self.len(), |e| { + let mut i = 0; + for (key, val) in self { + try!(e.emit_map_elt_key(i, |e| key.encode(e))); + try!(e.emit_map_elt_val(i, |e| val.encode(e))); + i += 1; + } + Ok(()) + }) + } +} +#[cfg(stage0)] impl<K, V, S> Decodable for HashMap<K, V, S> where K: Decodable + Hash< <S as HashState>::Hasher> + Eq, V: Decodable, @@ -195,7 +216,27 @@ impl<K, V, S> Decodable for HashMap<K, V, S> }) } } +#[cfg(not(stage0))] +impl<K, V, S> Decodable for HashMap<K, V, S> + where K: Decodable + Hash + Eq, + V: Decodable, + S: HashState + Default, +{ + fn decode<D: Decoder>(d: &mut D) -> Result<HashMap<K, V, S>, D::Error> { + d.read_map(|d, len| { + let state = Default::default(); + let mut map = HashMap::with_capacity_and_hash_state(len, state); + for i in 0..len { + let key = try!(d.read_map_elt_key(i, |d| Decodable::decode(d))); + let val = try!(d.read_map_elt_val(i, |d| Decodable::decode(d))); + map.insert(key, val); + } + Ok(map) + }) + } +} +#[cfg(stage0)] impl<T, S> Encodable for HashSet<T, S> where T: Encodable + Hash< <S as HashState>::Hasher> + Eq, S: HashState, @@ -212,7 +253,24 @@ impl<T, S> Encodable for HashSet<T, S> }) } } +#[cfg(not(stage0))] +impl<T, S> Encodable for HashSet<T, S> + where T: Encodable + Hash + Eq, + S: HashState, +{ + fn encode<E: Encoder>(&self, s: &mut E) -> Result<(), E::Error> { + s.emit_seq(self.len(), |s| { + let mut i = 0; + for e in self { + try!(s.emit_seq_elt(i, |s| e.encode(s))); + i += 1; + } + Ok(()) + }) + } +} +#[cfg(stage0)] impl<T, S> Decodable for HashSet<T, S> where T: Decodable + Hash< <S as HashState>::Hasher> + Eq, S: HashState + Default, @@ -229,6 +287,22 @@ impl<T, S> Decodable for HashSet<T, S> }) } } +#[cfg(not(stage0))] +impl<T, S> Decodable for HashSet<T, S> + where T: Decodable + Hash + Eq, + S: HashState + Default, +{ + fn decode<D: Decoder>(d: &mut D) -> Result<HashSet<T, S>, D::Error> { + d.read_seq(|d, len| { + let state = Default::default(); + let mut set = HashSet::with_capacity_and_hash_state(len, state); + for i in 0..len { + set.insert(try!(d.read_seq_elt(i, |d| Decodable::decode(d)))); + } + Ok(set) + }) + } +} impl<V: Encodable> Encodable for VecMap<V> { fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> { diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index 68b28784b42..a0f42815b43 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -1120,7 +1120,7 @@ impl Json { /// Returns None otherwise. pub fn as_string<'a>(&'a self) -> Option<&'a str> { match *self { - Json::String(ref s) => Some(&s[]), + Json::String(ref s) => Some(&s[..]), _ => None } } @@ -2237,7 +2237,7 @@ impl ::Decoder for Decoder { return Err(ExpectedError("String or Object".to_string(), format!("{}", json))) } }; - let idx = match names.iter().position(|n| *n == &name[]) { + let idx = match names.iter().position(|n| *n == &name[..]) { Some(idx) => idx, None => return Err(UnknownVariantError(name)) }; @@ -3461,7 +3461,7 @@ mod tests { hm.insert(1, true); let mut mem_buf = Vec::new(); write!(&mut mem_buf, "{}", super::as_pretty_json(&hm)).unwrap(); - let json_str = from_utf8(&mem_buf[]).unwrap(); + let json_str = from_utf8(&mem_buf[..]).unwrap(); match from_str(json_str) { Err(_) => panic!("Unable to parse json_str: {:?}", json_str), _ => {} // it parsed and we are good to go @@ -3477,7 +3477,7 @@ mod tests { hm.insert(1, true); let mut mem_buf = Vec::new(); write!(&mut mem_buf, "{}", super::as_pretty_json(&hm)).unwrap(); - let json_str = from_utf8(&mem_buf[]).unwrap(); + let json_str = from_utf8(&mem_buf[..]).unwrap(); match from_str(json_str) { Err(_) => panic!("Unable to parse json_str: {:?}", json_str), _ => {} // it parsed and we are good to go @@ -3517,7 +3517,7 @@ mod tests { write!(&mut writer, "{}", super::as_pretty_json(&json).indent(i)).unwrap(); - let printed = from_utf8(&writer[]).unwrap(); + let printed = from_utf8(&writer[..]).unwrap(); // Check for indents at each line let lines: Vec<&str> = printed.lines().collect(); @@ -3549,7 +3549,7 @@ mod tests { let mut map = HashMap::new(); map.insert(Enum::Foo, 0); let result = json::encode(&map).unwrap(); - assert_eq!(&result[], r#"{"Foo":0}"#); + assert_eq!(&result[..], r#"{"Foo":0}"#); let decoded: HashMap<Enum, _> = json::decode(&result).unwrap(); assert_eq!(map, decoded); } diff --git a/src/libserialize/lib.rs b/src/libserialize/lib.rs index 853da598ab5..d476fd72abc 100644 --- a/src/libserialize/lib.rs +++ b/src/libserialize/lib.rs @@ -31,7 +31,6 @@ Core encoding and decoding interfaces. #![feature(int_uint)] #![feature(old_io)] #![feature(old_path)] -#![feature(hash)] #![feature(rustc_private)] #![feature(staged_api)] #![feature(std_misc)] diff --git a/src/libserialize/serialize.rs b/src/libserialize/serialize.rs index 517907bcf58..70f0ba4bb23 100644 --- a/src/libserialize/serialize.rs +++ b/src/libserialize/serialize.rs @@ -326,7 +326,7 @@ impl Encodable for str { impl Encodable for String { fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> { - s.emit_str(&self[]) + s.emit_str(&self[..]) } } |
