Merge pull request #468 from sfackler/split-map
Split serialize_map_elt
This commit is contained in:
commit
d02e959b3f
@ -522,7 +522,8 @@ macro_rules! serialize_map {
|
||||
{
|
||||
let mut state = try!(serializer.serialize_map(Some(self.len())));
|
||||
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)
|
||||
}
|
||||
|
@ -334,18 +334,25 @@ pub trait Serializer {
|
||||
) -> Result<(), Self::Error>;
|
||||
|
||||
/// 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(
|
||||
&mut self,
|
||||
len: Option<usize>,
|
||||
) -> Result<Self::MapState, Self::Error>;
|
||||
|
||||
/// Serialize a map element. Must have previously called `serialize_map`.
|
||||
fn serialize_map_elt<K: Serialize, V: Serialize>(
|
||||
/// Serialize a map key. Must have previously called `serialize_map`.
|
||||
fn serialize_map_key<T: Serialize>(
|
||||
&mut self,
|
||||
state: &mut Self::MapState,
|
||||
key: K,
|
||||
value: V,
|
||||
key: T
|
||||
) -> 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>;
|
||||
|
||||
/// Finishes serializing a map.
|
||||
|
@ -259,9 +259,12 @@ impl<'a, I> ser::Serializer for Serializer<'a, I>
|
||||
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));
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -229,9 +229,14 @@ impl Serializer for BytesSerializer {
|
||||
Err(Error)
|
||||
}
|
||||
|
||||
fn serialize_map_elt<K, V>(&mut self, _: &mut (), _key: K, _value: V) -> Result<(), Error>
|
||||
where K: Serialize,
|
||||
V: Serialize,
|
||||
fn serialize_map_key<T>(&mut self, _: &mut (), _key: T) -> Result<(), Error>
|
||||
where T: Serialize
|
||||
{
|
||||
Err(Error)
|
||||
}
|
||||
|
||||
fn serialize_map_value<T>(&mut self, _: &mut (), _value: T) -> Result<(), Error>
|
||||
where T: Serialize
|
||||
{
|
||||
Err(Error)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user