Merge pull request #468 from sfackler/split-map

Split serialize_map_elt
This commit is contained in:
David Tolnay
2016-07-27 12:50:42 -07:00
committed by GitHub
4 changed files with 27 additions and 11 deletions
+2 -1
View File
@@ -522,7 +522,8 @@ macro_rules! serialize_map {
{ {
let mut state = try!(serializer.serialize_map(Some(self.len()))); let mut state = try!(serializer.serialize_map(Some(self.len())));
for (k, v) in self { for (k, v) in self {
try!(serializer.serialize_map_elt(&mut state, k, v)); try!(serializer.serialize_map_key(&mut state, k));
try!(serializer.serialize_map_value(&mut state, v));
} }
serializer.serialize_map_end(state) serializer.serialize_map_end(state)
} }
+12 -5
View File
@@ -334,18 +334,25 @@ pub trait Serializer {
) -> Result<(), Self::Error>; ) -> Result<(), Self::Error>;
/// Begins to serialize a map. This call must be followed by zero or more /// Begins to serialize a map. This call must be followed by zero or more
/// calls to `serialize_map_elt`, then a call to `serialize_map_end`. /// calls to `serialize_map_key` and `serialize_map_value`, then a call to
/// `serialize_map_end`.
fn serialize_map( fn serialize_map(
&mut self, &mut self,
len: Option<usize>, len: Option<usize>,
) -> Result<Self::MapState, Self::Error>; ) -> Result<Self::MapState, Self::Error>;
/// Serialize a map element. Must have previously called `serialize_map`. /// Serialize a map key. Must have previously called `serialize_map`.
fn serialize_map_elt<K: Serialize, V: Serialize>( fn serialize_map_key<T: Serialize>(
&mut self, &mut self,
state: &mut Self::MapState, state: &mut Self::MapState,
key: K, key: T
value: V, ) -> Result<(), Self::Error>;
/// Serialize a map value. Must have previously called `serialize_map`.
fn serialize_map_value<T: Serialize>(
&mut self,
state: &mut Self::MapState,
value: T
) -> Result<(), Self::Error>; ) -> Result<(), Self::Error>;
/// Finishes serializing a map. /// Finishes serializing a map.
+5 -2
View File
@@ -259,9 +259,12 @@ impl<'a, I> ser::Serializer for Serializer<'a, I>
Ok(()) Ok(())
} }
fn serialize_map_elt<K, V>(&mut self, _: &mut (), key: K, value: V) -> Result<(), Self::Error> where K: Serialize, V: Serialize { fn serialize_map_key<T>(&mut self, _: &mut (), key: T) -> Result<(), Self::Error> where T: Serialize {
assert_eq!(self.tokens.next(), Some(&Token::MapSep)); assert_eq!(self.tokens.next(), Some(&Token::MapSep));
try!(key.serialize(self)); key.serialize(self)
}
fn serialize_map_value<T>(&mut self, _: &mut (), value: T) -> Result<(), Self::Error> where T: Serialize {
value.serialize(self) value.serialize(self)
} }
+8 -3
View File
@@ -229,9 +229,14 @@ impl Serializer for BytesSerializer {
Err(Error) Err(Error)
} }
fn serialize_map_elt<K, V>(&mut self, _: &mut (), _key: K, _value: V) -> Result<(), Error> fn serialize_map_key<T>(&mut self, _: &mut (), _key: T) -> Result<(), Error>
where K: Serialize, where T: Serialize
V: Serialize, {
Err(Error)
}
fn serialize_map_value<T>(&mut self, _: &mut (), _value: T) -> Result<(), Error>
where T: Serialize
{ {
Err(Error) Err(Error)
} }