From f45b83f0c1bf7cc4734be2cd41731976238601e9 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 13 Apr 2017 16:26:30 -0700 Subject: [PATCH] Condense the deref impls --- serde/src/ser/impls.rs | 89 +++++++++--------------------------------- 1 file changed, 18 insertions(+), 71 deletions(-) diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index 46d0601e..0fb48c11 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -302,87 +302,34 @@ map_impl!(HashMap); //////////////////////////////////////////////////////////////////////////////// -impl<'a, T: ?Sized> Serialize for &'a T -where - T: Serialize, -{ - #[inline] - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - (**self).serialize(serializer) - } +macro_rules! deref_impl { + ($($desc:tt)+) => { + impl $($desc)+ { + #[inline] + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + (**self).serialize(serializer) + } + } + }; } -impl<'a, T: ?Sized> Serialize for &'a mut T -where - T: Serialize, -{ - #[inline] - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - (**self).serialize(serializer) - } -} +deref_impl!(<'a, T: ?Sized> Serialize for &'a T where T: Serialize); +deref_impl!(<'a, T: ?Sized> Serialize for &'a mut T where T: Serialize); #[cfg(any(feature = "std", feature = "alloc"))] -impl Serialize for Box -where - T: Serialize, -{ - #[inline] - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - (**self).serialize(serializer) - } -} +deref_impl!( Serialize for Box where T: Serialize); #[cfg(all(feature = "rc", any(feature = "std", feature = "alloc")))] -impl Serialize for Rc -where - T: Serialize, -{ - #[inline] - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - (**self).serialize(serializer) - } -} +deref_impl!( Serialize for Rc where T: Serialize); #[cfg(all(feature = "rc", any(feature = "std", feature = "alloc")))] -impl Serialize for Arc -where - T: Serialize, -{ - #[inline] - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - (**self).serialize(serializer) - } -} +deref_impl!( Serialize for Arc where T: Serialize); #[cfg(any(feature = "std", feature = "collections"))] -impl<'a, T: ?Sized> Serialize for Cow<'a, T> -where - T: Serialize + ToOwned, -{ - #[inline] - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - (**self).serialize(serializer) - } -} +deref_impl!(<'a, T: ?Sized> Serialize for Cow<'a, T> where T: Serialize + ToOwned); ////////////////////////////////////////////////////////////////////////////////