Skip to content

Commit 5484f7a

Browse files
committed
Add IntoIterator<Item = &Pk> for Miniscript
1 parent 7bbc3e4 commit 5484f7a

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

src/miniscript/astelem.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,3 +815,45 @@ impl<Pk: MiniscriptKey, Ctx: ScriptContext> Terminal<Pk, Ctx> {
815815
}
816816
}
817817
}
818+
819+
impl<'a, Pk: MiniscriptKey, Ctx: ScriptContext> IntoIterator for &'a Terminal<Pk, Ctx> {
820+
type Item = &'a Pk;
821+
type IntoIter = Box<dyn Iterator<Item = &'a Pk> + 'a>;
822+
823+
fn into_iter(self) -> Self::IntoIter {
824+
use std::iter;
825+
826+
match self {
827+
Terminal::True => Box::new(iter::empty()),
828+
Terminal::False => Box::new(iter::empty()),
829+
Terminal::PkK(ref pk) => Box::new(iter::once(pk)),
830+
Terminal::PkH(_) => Box::new(iter::empty()),
831+
Terminal::After(_) => Box::new(iter::empty()),
832+
Terminal::Older(_) => Box::new(iter::empty()),
833+
Terminal::Sha256(_) => Box::new(iter::empty()),
834+
Terminal::Hash256(_) => Box::new(iter::empty()),
835+
Terminal::Ripemd160(_) => Box::new(iter::empty()),
836+
Terminal::Hash160(_) => Box::new(iter::empty()),
837+
Terminal::Alt(ref i) => i.into_iter(),
838+
Terminal::Swap(ref i) => i.into_iter(),
839+
Terminal::Check(ref i) => i.into_iter(),
840+
Terminal::DupIf(ref i) => i.into_iter(),
841+
Terminal::Verify(ref i) => i.into_iter(),
842+
Terminal::NonZero(ref i) => i.into_iter(),
843+
Terminal::ZeroNotEqual(ref i) => i.into_iter(),
844+
Terminal::AndV(ref i1, ref i2)
845+
| Terminal::AndB(ref i1, ref i2)
846+
| Terminal::OrB(ref i1, ref i2)
847+
| Terminal::OrD(ref i1, ref i2)
848+
| Terminal::OrC(ref i1, ref i2)
849+
| Terminal::OrI(ref i1, ref i2) => Box::new(i1.into_iter().chain(i2.into_iter())),
850+
Terminal::AndOr(ref i1, ref i2, ref i3) => {
851+
Box::new(i1.into_iter().chain(i2.into_iter()).chain(i3.into_iter()))
852+
}
853+
Terminal::Thresh(_, ref scripts) => {
854+
Box::new(scripts.iter().map(|s| s.into_iter()).flatten())
855+
}
856+
Terminal::Multi(_, ref pks) => Box::new(pks.iter()),
857+
}
858+
}
859+
}

src/miniscript/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,15 @@ where
413413
}
414414
}
415415

416+
impl<'a, Pk: MiniscriptKey, Ctx: ScriptContext> IntoIterator for &'a Miniscript<Pk, Ctx> {
417+
type Item = &'a Pk;
418+
type IntoIter = Box<dyn Iterator<Item = &'a Pk> + 'a>;
419+
420+
fn into_iter(self) -> Self::IntoIter {
421+
self.node.into_iter()
422+
}
423+
}
424+
416425
serde_string_impl_pk!(Miniscript, "a miniscript", Ctx; ScriptContext);
417426

418427
#[cfg(test)]

0 commit comments

Comments
 (0)