refactor(serde): Minor serde micro-optimizations
This commit is contained in:
@@ -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()),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user