diff --git a/src/primitives/decode.rs b/src/primitives/decode.rs index 4bd31fdf5..e1bbec165 100644 --- a/src/primitives/decode.rs +++ b/src/primitives/decode.rs @@ -373,6 +373,14 @@ impl<'s> CheckedHrpstring<'s> { #[inline] pub fn data_part_ascii_no_checksum(&self) -> &'s [u8] { self.ascii } + /// Returns an iterator that yields the data part of the parsed bech32 encoded string as [`Fe32`]s. + /// + /// Converts the ASCII bytes representing field elements to the respective field elements. + #[inline] + pub fn fe32_iter>(&self) -> AsciiToFe32Iter { + AsciiToFe32Iter { iter: self.ascii.iter().copied() } + } + /// Returns an iterator that yields the data part of the parsed bech32 encoded string. /// /// Converts the ASCII bytes representing field elements to the respective field elements, then @@ -631,7 +639,7 @@ fn check_characters(s: &str) -> Result { /// An iterator over a parsed HRP string data as bytes. pub struct ByteIter<'s> { - iter: FesToBytes>>>, + iter: FesToBytes>, } impl<'s> Iterator for ByteIter<'s> { @@ -649,7 +657,7 @@ impl<'s> ExactSizeIterator for ByteIter<'s> { /// An iterator over a parsed HRP string data as field elements. pub struct Fe32Iter<'s> { - iter: AsciiToFe32Iter>>, + iter: AsciiToFe32Iter<'s>, } impl<'s> Iterator for Fe32Iter<'s> { @@ -660,21 +668,18 @@ impl<'s> Iterator for Fe32Iter<'s> { fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } } -/// Helper iterator adaptor that maps an iterator of valid bech32 character ASCII bytes to an +/// Iterator adaptor that maps an iterator of valid bech32 character ASCII bytes to an /// iterator of field elements. /// /// # Panics /// /// If any `u8` in the input iterator is out of range for an [`Fe32`]. Should only be used on data /// that has already been checked for validity (eg, by using `check_characters`). -struct AsciiToFe32Iter> { - iter: I, +pub struct AsciiToFe32Iter<'s> { + iter: iter::Copied>, } -impl Iterator for AsciiToFe32Iter -where - I: Iterator, -{ +impl<'s> Iterator for AsciiToFe32Iter<'s> { type Item = Fe32; #[inline] fn next(&mut self) -> Option { self.iter.next().map(Fe32::from_char_unchecked) } @@ -685,10 +690,7 @@ where } } -impl ExactSizeIterator for AsciiToFe32Iter -where - I: Iterator + ExactSizeIterator, -{ +impl<'s> ExactSizeIterator for AsciiToFe32Iter<'s> { #[inline] fn len(&self) -> usize { self.iter.len() } }