From 1c036476567622eb99ad385b263d231fa967af21 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 24 Jan 2021 20:13:02 -0800 Subject: [PATCH] Move InPlaceSeed out of private mod --- serde/src/de/impls.rs | 2 +- serde/src/de/seed.rs | 19 +++++++++++++++++++ serde/src/lib.rs | 3 +++ serde/src/private/de.rs | 24 ++++-------------------- 4 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 serde/src/de/seed.rs diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index 352b6508..1d5a4c5d 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -7,7 +7,7 @@ use de::{ #[cfg(any(core_duration, feature = "std", feature = "alloc"))] use de::MapAccess; -use __private::de::InPlaceSeed; +use seed::InPlaceSeed; #[cfg(any(feature = "std", feature = "alloc"))] use __private::de::size_hint; diff --git a/serde/src/de/seed.rs b/serde/src/de/seed.rs new file mode 100644 index 00000000..13b7ea46 --- /dev/null +++ b/serde/src/de/seed.rs @@ -0,0 +1,19 @@ +use de::{Deserialize, DeserializeSeed, Deserializer}; + +/// A DeserializeSeed helper for implementing deserialize_in_place Visitors. +/// +/// Wraps a mutable reference and calls deserialize_in_place on it. +pub struct InPlaceSeed<'a, T: 'a>(pub &'a mut T); + +impl<'a, 'de, T> DeserializeSeed<'de> for InPlaceSeed<'a, T> +where + T: Deserialize<'de>, +{ + type Value = (); + fn deserialize(self, deserializer: D) -> Result + where + D: Deserializer<'de>, + { + T::deserialize_in_place(deserializer, self.0) + } +} diff --git a/serde/src/lib.rs b/serde/src/lib.rs index d022b0e4..9a3c510a 100644 --- a/serde/src/lib.rs +++ b/serde/src/lib.rs @@ -276,6 +276,9 @@ use self::__private as export; #[allow(unused_imports)] use self::__private as private; +#[path = "de/seed.rs"] +mod seed; + #[cfg(not(feature = "std"))] mod std_error; diff --git a/serde/src/private/de.rs b/serde/src/private/de.rs index 1b05cc74..77588cb2 100644 --- a/serde/src/private/de.rs +++ b/serde/src/private/de.rs @@ -1,10 +1,10 @@ use lib::*; use de::value::{BorrowedBytesDeserializer, BytesDeserializer}; -use de::{Deserialize, DeserializeSeed, Deserializer, Error, IntoDeserializer, Visitor}; +use de::{Deserialize, Deserializer, Error, IntoDeserializer, Visitor}; #[cfg(any(feature = "std", feature = "alloc"))] -use de::{MapAccess, Unexpected}; +use de::{DeserializeSeed, MapAccess, Unexpected}; #[cfg(any(feature = "std", feature = "alloc"))] pub use self::content::{ @@ -13,6 +13,8 @@ pub use self::content::{ TagOrContentField, TagOrContentFieldVisitor, TaggedContentVisitor, UntaggedUnitVisitor, }; +pub use seed::InPlaceSeed; + /// If the missing field is of type `Option` then treat is as `None`, /// otherwise it is an error. pub fn missing_field<'de, V, E>(field: &'static str) -> Result @@ -2666,24 +2668,6 @@ where } } -/// A DeserializeSeed helper for implementing deserialize_in_place Visitors. -/// -/// Wraps a mutable reference and calls deserialize_in_place on it. -pub struct InPlaceSeed<'a, T: 'a>(pub &'a mut T); - -impl<'a, 'de, T> DeserializeSeed<'de> for InPlaceSeed<'a, T> -where - T: Deserialize<'de>, -{ - type Value = (); - fn deserialize(self, deserializer: D) -> Result - where - D: Deserializer<'de>, - { - T::deserialize_in_place(deserializer, self.0) - } -} - #[cfg(any(feature = "std", feature = "alloc"))] pub struct FlatMapDeserializer<'a, 'de: 'a, E>( pub &'a mut Vec, Content<'de>)>>,