1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use crate::transaction::Output;
use chain_addr::{Address, Discrimination, Kind};
use quickcheck::{Arbitrary, Gen};
use std::iter;

#[derive(Clone, Debug)]
pub struct OutputsWithoutMultisig(pub Vec<Output<Address>>);

impl Arbitrary for OutputsWithoutMultisig {
    fn arbitrary<G: Gen>(gen: &mut G) -> Self {
        let n = usize::arbitrary(gen);
        OutputsWithoutMultisig(
            iter::from_fn(|| Some(Output::arbitrary(gen)))
                .filter(|x| !matches!(x.address.1, Kind::Multisig { .. }))
                .take(n)
                .collect(),
        )
    }
}

impl OutputsWithoutMultisig {
    pub fn set_discrimination(&mut self, discrimination: Discrimination) {
        for output in &mut self.0 {
            output.address.0 = discrimination
        }
    }
}