@@ -577,6 +577,23 @@ impl<A, B, C> From<(A, (B, (C, ())))> for TupleThree<A, B, C> {
577
577
}
578
578
}
579
579
580
+ #[ doc( hidden) ]
581
+ #[ macro_export]
582
+ macro_rules! group_multi_keys {
583
+ ( $( $key: expr ) ,+ ) => { {
584
+ use $crate:: keys:: IntoDescriptorKey ;
585
+
586
+ let keys = vec![
587
+ $(
588
+ $key. into_descriptor_key( ) ,
589
+ ) *
590
+ ] ;
591
+
592
+ keys. into_iter( ) . collect:: <Result <Vec <_>, _>>( )
593
+ . map_err( $crate:: descriptor:: DescriptorError :: Key )
594
+ } } ;
595
+ }
596
+
580
597
#[ doc( hidden) ]
581
598
#[ macro_export]
582
599
macro_rules! fragment_internal {
@@ -737,21 +754,22 @@ macro_rules! fragment {
737
754
. and_then( |items| $crate:: fragment!( thresh_vec( $thresh, items) ) )
738
755
} ) ;
739
756
( multi_vec ( $thresh: expr, $keys: expr ) ) => ( {
740
- $crate:: keys:: make_multi( $thresh, $keys)
757
+ let secp = $crate:: bitcoin:: secp256k1:: Secp256k1 :: new( ) ;
758
+
759
+ $crate:: keys:: make_multi( $thresh, $crate:: miniscript:: Terminal :: Multi , $keys, & secp)
741
760
} ) ;
742
761
( multi ( $thresh: expr $( , $key: expr ) + ) ) => ( {
743
- use $crate:: keys:: IntoDescriptorKey ;
762
+ $crate:: group_multi_keys!( $( $key ) ,* )
763
+ . and_then( |keys| $crate:: fragment!( multi_vec ( $thresh, keys ) ) )
764
+ } ) ;
765
+ ( multi_a_vec ( $thresh: expr, $keys: expr ) ) => ( {
744
766
let secp = $crate:: bitcoin:: secp256k1:: Secp256k1 :: new( ) ;
745
767
746
- let keys = vec![
747
- $(
748
- $key. into_descriptor_key( ) ,
749
- ) *
750
- ] ;
751
-
752
- keys. into_iter( ) . collect:: <Result <Vec <_>, _>>( )
753
- . map_err( $crate:: descriptor:: DescriptorError :: Key )
754
- . and_then( |keys| $crate:: keys:: make_multi( $thresh, keys, & secp) )
768
+ $crate:: keys:: make_multi( $thresh, $crate:: miniscript:: Terminal :: MultiA , $keys, & secp)
769
+ } ) ;
770
+ ( multi_a ( $thresh: expr $( , $key: expr ) + ) ) => ( {
771
+ $crate:: group_multi_keys!( $( $key ) ,* )
772
+ . and_then( |keys| $crate:: fragment!( multi_a_vec ( $thresh, keys ) ) )
755
773
} ) ;
756
774
757
775
// `sortedmulti()` is handled separately
0 commit comments