Merge pull request #644 from erickt/serde

Minor serde micro-optimizations
This commit is contained in:
Sean McArthur
2015-08-31 22:02:30 -07:00
2 changed files with 5 additions and 28 deletions

View File

@@ -332,33 +332,10 @@ impl fmt::Debug for Headers {
#[cfg(feature = "serde-serialization")]
impl Serialize for Headers {
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer {
struct HeadersVisitor<'a> {
iter: HeadersItems<'a>,
len: usize,
}
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(),
})
serializer.visit_map(ser::impls::MapIteratorVisitor::new(
self.iter().map(|header| (header.name(), header.value_string())),
Some(self.len()),
))
}
}

View File

@@ -23,7 +23,7 @@ pub struct RawStatus(pub u16, pub Cow<'static, str>);
#[cfg(feature = "serde-serialization")]
impl Serialize for RawStatus {
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)
}
}