From 6c65f2cdeaea81320df922984fca728b3a342482 Mon Sep 17 00:00:00 2001 From: Mingun Date: Sun, 2 Oct 2022 19:34:33 +0500 Subject: [PATCH] Remove `TaggedContent`, replace it by a tuple That type does not give any benefits so we can avoid that hidden public but no-API struct --- serde/src/private/de.rs | 26 +++++++------------------- serde_derive/src/de.rs | 6 +++--- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/serde/src/private/de.rs b/serde/src/private/de.rs index b4439e3b2..f69f467ac 100644 --- a/serde/src/private/de.rs +++ b/serde/src/private/de.rs @@ -797,19 +797,13 @@ mod content { /// Used by generated code to deserialize an internally tagged enum. /// /// Not public API. - pub struct TaggedContent<'de, T> { - pub tag: T, - pub content: Content<'de>, - } - - /// Not public API. - pub struct TaggedContentVisitor<'de, T> { + pub struct TaggedContentVisitor { tag_name: &'static str, expecting: &'static str, - value: PhantomData>, + value: PhantomData, } - impl<'de, T> TaggedContentVisitor<'de, T> { + impl TaggedContentVisitor { /// Visitor for the content of an internally tagged enum with the given /// tag name. pub fn new(name: &'static str, expecting: &'static str) -> Self { @@ -821,11 +815,11 @@ mod content { } } - impl<'de, T> Visitor<'de> for TaggedContentVisitor<'de, T> + impl<'de, T> Visitor<'de> for TaggedContentVisitor where T: Deserialize<'de>, { - type Value = TaggedContent<'de, T>; + type Value = (T, Content<'de>); fn expecting(&self, fmt: &mut fmt::Formatter) -> fmt::Result { fmt.write_str(self.expecting) @@ -842,10 +836,7 @@ mod content { } }; let rest = de::value::SeqAccessDeserializer::new(seq); - Ok(TaggedContent { - tag: tag, - content: try!(Content::deserialize(rest)), - }) + Ok((tag, try!(Content::deserialize(rest)))) } fn visit_map(self, mut map: M) -> Result @@ -870,10 +861,7 @@ mod content { } match tag { None => Err(de::Error::missing_field(self.tag_name)), - Some(tag) => Ok(TaggedContent { - tag: tag, - content: Content::Map(vec), - }), + Some(tag) => Ok((tag, Content::Map(vec))), } } } diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index c128adb48..76c612925 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -1352,12 +1352,12 @@ fn deserialize_internally_tagged_enum( #variants_stmt - let __tagged = try!(_serde::Deserializer::deserialize_any( + let (__tag, __content) = try!(_serde::Deserializer::deserialize_any( __deserializer, _serde::__private::de::TaggedContentVisitor::<__Field>::new(#tag, #expecting))); - let __deserializer = _serde::__private::de::ContentDeserializer::<__D::Error>::new(__tagged.content); + let __deserializer = _serde::__private::de::ContentDeserializer::<__D::Error>::new(__content); - match __tagged.tag { + match __tag { #(#variant_arms)* } }