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