From 0b92d8db6ce72d6d94577f0a643464a35d4e02cc Mon Sep 17 00:00:00 2001 From: Jean-Pierre De Jesus DIAZ Date: Mon, 13 Mar 2023 11:56:53 +0100 Subject: [PATCH] Add iterator over word indices. Signed-off-by: Jean-Pierre De Jesus DIAZ --- src/lib.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 811b274..4f7b915 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -309,7 +309,7 @@ impl Mnemonic { self.lang } - /// Returns an iterator over the words of the [`Mnemonic`]. + /// Returns an iterator over the words of the [Mnemonic]. /// /// # Examples /// @@ -325,15 +325,34 @@ impl Mnemonic { /// ``` pub fn words(&self) -> impl Iterator + Clone + '_ { let list = self.lang.word_list(); - self.words.iter().take_while(|w| **w != EOF).map(move |w| list[*w as usize]) + self.word_indices().map(move |i| list[i]) } - /// Returns an iterator over the words of the [`Mnemonic`]. + /// Returns an iterator over the words of the [Mnemonic]. #[deprecated(note = "Use Mnemonic::words instead")] pub fn word_iter(&self) -> impl Iterator + Clone + '_ { self.words() } + /// Returns an iterator over [Mnemonic] word indices. + /// + /// # Examples + /// + /// Basic usage: + /// + /// ``` + /// use bip39::{Language, Mnemonic}; + /// + /// let list = Language::English.word_list(); + /// let mnemonic = Mnemonic::from_entropy(&[0; 32]).unwrap(); + /// for i in mnemonic.word_indices() { + /// println!("{} ({})", list[i], i); + /// } + /// ``` + pub fn word_indices(&self) -> impl Iterator + Clone + '_ { + self.words.iter().take_while(|&&w| w != EOF).map(|w| *w as usize) + } + /// Determine the language of the mnemonic as a word iterator. /// See documentation on [Mnemonic::language_of] for more info. fn language_of_iter<'a, W: Iterator>(words: W) -> Result { @@ -514,7 +533,7 @@ impl Mnemonic { /// Get the number of words in the mnemonic. pub fn word_count(&self) -> usize { - self.words.iter().take_while(|w| **w != EOF).count() + self.word_indices().count() } /// Convert to seed bytes with a passphrase in normalized UTF8.