diff --git a/src/map.rs b/src/map.rs index c9bfdc6d7..f52c3fdc3 100644 --- a/src/map.rs +++ b/src/map.rs @@ -307,8 +307,7 @@ impl ser::Serialize for Map { use serde::ser::SerializeMap; let mut map = tri!(serializer.serialize_map(Some(self.len()))); for (k, v) in self { - tri!(map.serialize_key(k)); - tri!(map.serialize_value(v)); + map.serialize_entry(k, v)?; } map.end() } diff --git a/src/ser.rs b/src/ser.rs index 1387e6c18..38aa83bb3 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -730,6 +730,17 @@ where } } + #[inline] + fn serialize_entry(&mut self, key: &K, value: &V) -> Result<()> + where + K: Serialize, + V: Serialize, + { + self.serialize_key(key)?; + self.serialize_value(value)?; + Ok(()) + } + #[inline] fn end(self) -> Result<()> { match self { @@ -762,10 +773,7 @@ where T: Serialize, { match *self { - Compound::Map { .. } => { - tri!(ser::SerializeMap::serialize_key(self, key)); - ser::SerializeMap::serialize_value(self, value) - } + Compound::Map { .. } => ser::SerializeMap::serialize_entry(self, key, value), #[cfg(feature = "arbitrary_precision")] Compound::Number { ref mut ser, .. } => { if key == crate::number::TOKEN { diff --git a/src/value/ser.rs b/src/value/ser.rs index 6b76b1644..a909120fc 100644 --- a/src/value/ser.rs +++ b/src/value/ser.rs @@ -24,8 +24,7 @@ impl Serialize for Value { use serde::ser::SerializeMap; let mut map = tri!(serializer.serialize_map(Some(m.len()))); for (k, v) in m { - tri!(map.serialize_key(k)); - tri!(map.serialize_value(v)); + map.serialize_entry(k, v)?; } map.end() } @@ -601,10 +600,7 @@ impl serde::ser::SerializeStruct for SerializeMap { T: Serialize, { match *self { - SerializeMap::Map { .. } => { - tri!(serde::ser::SerializeMap::serialize_key(self, key)); - serde::ser::SerializeMap::serialize_value(self, value) - } + SerializeMap::Map { .. } => serde::ser::SerializeMap::serialize_entry(self, key, value), #[cfg(feature = "arbitrary_precision")] SerializeMap::Number { ref mut out_value } => { if key == crate::number::TOKEN { diff --git a/tests/test.rs b/tests/test.rs index 91c7d3f6e..38c9f5497 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -1467,8 +1467,7 @@ fn test_serialize_map_with_no_len() { use serde::ser::SerializeMap; let mut map = serializer.serialize_map(None)?; for (k, v) in &self.0 { - map.serialize_key(k)?; - map.serialize_value(v)?; + map.serialize_entry(k, v)?; } map.end() }