diff --git a/Cargo.toml b/Cargo.toml index 87acea1..678ee05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ bytes = { version = "1.2.1", optional = true } [dev-dependencies] serde = { version = "1.0", features = ["derive"] } assert_matches = "1.5.0" -generator = "0.7" +generator = "0.8" itertools = "0.13.0" [package.metadata.docs.rs] diff --git a/src/de.rs b/src/de.rs index 8f26cbf..7a04298 100644 --- a/src/de.rs +++ b/src/de.rs @@ -166,6 +166,23 @@ macro_rules! impl_for_deserialize_primitive { }; } +impl<'a, 'de, It> serde::de::EnumAccess<'de> for &'a mut Deserializer<'de, It> +where + It: iter::FusedIterator + Iterator, +{ + type Error = Error; + type Variant = Self; + + fn variant_seed(self, seed: V) -> Result<(V::Value, Self::Variant)> + where + V: de::DeserializeSeed<'de>, + { + let idx: u32 = self.next_u32()?; + let val: Result<_> = seed.deserialize(idx.into_deserializer()); + Ok((val?, self)) + } +} + impl<'de, 'a, It> de::Deserializer<'de> for &'a mut Deserializer<'de, It> where It: iter::FusedIterator + Iterator, @@ -316,23 +333,6 @@ where where V: Visitor<'de>, { - impl<'a, 'de, It> serde::de::EnumAccess<'de> for &'a mut Deserializer<'de, It> - where - It: iter::FusedIterator + Iterator, - { - type Error = Error; - type Variant = Self; - - fn variant_seed(self, seed: V) -> Result<(V::Value, Self::Variant)> - where - V: de::DeserializeSeed<'de>, - { - let idx: u32 = self.next_u32()?; - let val: Result<_> = seed.deserialize(idx.into_deserializer()); - Ok((val?, self)) - } - } - visitor.visit_enum(self) } @@ -471,7 +471,7 @@ mod tests { /// Generate subslices, plus stuffing empty slices into the returned /// iterator. - fn generate_subslices(mut bytes: &[u8], chunk_size: usize) -> impl Iterator { + fn generate_subslices<'a>(mut bytes: &'a [u8], chunk_size: usize) -> impl Iterator { assert_ne!(chunk_size, 0); Gn::new_scoped(move |mut s| loop {