refactor(serde): Minor serde micro-optimizations

This commit is contained in:
Erick Tryzelaar
2015-08-31 21:49:05 -07:00
parent 5c7195ab4a
commit 3a3c8b69a7
2 changed files with 5 additions and 28 deletions

View File

@@ -332,33 +332,10 @@ impl fmt::Debug for Headers {
#[cfg(feature = "serde-serialization")] #[cfg(feature = "serde-serialization")]
impl Serialize for Headers { impl Serialize for Headers {
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer { fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer {
struct HeadersVisitor<'a> { serializer.visit_map(ser::impls::MapIteratorVisitor::new(
iter: HeadersItems<'a>, self.iter().map(|header| (header.name(), header.value_string())),
len: usize, Some(self.len()),
} ))
impl<'a> ser::MapVisitor for HeadersVisitor<'a> {
fn visit<S>(&mut self, serializer: &mut S) -> Result<Option<()>, S::Error>
where S: Serializer {
match self.iter.next() {
Some(header_item) => {
try!(serializer.visit_map_elt(header_item.name(),
header_item.value_string()));
Ok(Some(()))
}
None => Ok(None),
}
}
fn len(&self) -> Option<usize> {
Some(self.len)
}
}
serializer.visit_map(HeadersVisitor {
iter: self.iter(),
len: self.len(),
})
} }
} }

View File

@@ -23,7 +23,7 @@ pub struct RawStatus(pub u16, pub Cow<'static, str>);
#[cfg(feature = "serde-serialization")] #[cfg(feature = "serde-serialization")]
impl Serialize for RawStatus { impl Serialize for RawStatus {
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer { fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer {
(self.0, self.1.clone().into_owned()).serialize(serializer) (self.0, &self.1).serialize(serializer)
} }
} }