@@ -22,7 +22,7 @@ use crate::prelude::*;
22
22
use crate :: util:: varint_len;
23
23
use crate :: {
24
24
Error , ForEachKey , FromStrKey , Miniscript , MiniscriptKey , Satisfier , Segwitv0 , ToPublicKey ,
25
- TranslateErr , TranslatePk , Translator ,
25
+ TranslateErr , Translator ,
26
26
} ;
27
27
/// A Segwitv0 wsh descriptor
28
28
#[ derive( Clone , Ord , PartialOrd , Eq , PartialEq , Hash ) ]
@@ -128,6 +128,19 @@ impl<Pk: MiniscriptKey> Wsh<Pk> {
128
128
varint_len ( max_sat_elems) +
129
129
max_sat_size)
130
130
}
131
+
132
+ /// Converts the keys in a script from one type to another.
133
+ pub fn translate_pk < Q , T , E > ( & self , t : & mut T ) -> Result < Wsh < Q > , TranslateErr < E > >
134
+ where
135
+ T : Translator < Pk , Q , E > ,
136
+ Q : MiniscriptKey ,
137
+ {
138
+ let inner = match self . inner {
139
+ WshInner :: SortedMulti ( ref smv) => WshInner :: SortedMulti ( smv. translate_pk ( t) ?) ,
140
+ WshInner :: Ms ( ref ms) => WshInner :: Ms ( ms. translate_pk ( t) ?) ,
141
+ } ;
142
+ Ok ( Wsh { inner } )
143
+ }
131
144
}
132
145
133
146
impl < Pk : MiniscriptKey + ToPublicKey > Wsh < Pk > {
@@ -291,25 +304,6 @@ impl<Pk: MiniscriptKey> ForEachKey<Pk> for Wsh<Pk> {
291
304
}
292
305
}
293
306
294
- impl < P , Q > TranslatePk < P , Q > for Wsh < P >
295
- where
296
- P : MiniscriptKey ,
297
- Q : MiniscriptKey ,
298
- {
299
- type Output = Wsh < Q > ;
300
-
301
- fn translate_pk < T , E > ( & self , t : & mut T ) -> Result < Self :: Output , TranslateErr < E > >
302
- where
303
- T : Translator < P , Q , E > ,
304
- {
305
- let inner = match self . inner {
306
- WshInner :: SortedMulti ( ref smv) => WshInner :: SortedMulti ( smv. translate_pk ( t) ?) ,
307
- WshInner :: Ms ( ref ms) => WshInner :: Ms ( ms. translate_pk ( t) ?) ,
308
- } ;
309
- Ok ( Wsh { inner } )
310
- }
311
- }
312
-
313
307
/// A bare Wpkh descriptor at top level
314
308
#[ derive( Clone , Ord , PartialOrd , Eq , PartialEq , Hash ) ]
315
309
pub struct Wpkh < Pk : MiniscriptKey > {
@@ -370,6 +364,19 @@ impl<Pk: MiniscriptKey> Wpkh<Pk> {
370
364
note = "Use max_weight_to_satisfy instead. The method to count bytes was redesigned and the results will differ from max_weight_to_satisfy. For more details check rust-bitcoin/rust-miniscript#476."
371
365
) ]
372
366
pub fn max_satisfaction_weight ( & self ) -> usize { 4 + 1 + 73 + Segwitv0 :: pk_len ( & self . pk ) }
367
+
368
+ /// Converts the keys in a script from one type to another.
369
+ pub fn translate_pk < Q , T , E > ( & self , t : & mut T ) -> Result < Wpkh < Q > , TranslateErr < E > >
370
+ where
371
+ T : Translator < Pk , Q , E > ,
372
+ Q : MiniscriptKey ,
373
+ {
374
+ let res = Wpkh :: new ( t. pk ( & self . pk ) ?) ;
375
+ match res {
376
+ Ok ( pk) => Ok ( pk) ,
377
+ Err ( e) => Err ( TranslateErr :: OuterError ( Error :: from ( e) ) ) ,
378
+ }
379
+ }
373
380
}
374
381
375
382
impl < Pk : MiniscriptKey + ToPublicKey > Wpkh < Pk > {
@@ -509,22 +516,3 @@ impl<Pk: FromStrKey> core::str::FromStr for Wpkh<Pk> {
509
516
impl < Pk : MiniscriptKey > ForEachKey < Pk > for Wpkh < Pk > {
510
517
fn for_each_key < ' a , F : FnMut ( & ' a Pk ) -> bool > ( & ' a self , mut pred : F ) -> bool { pred ( & self . pk ) }
511
518
}
512
-
513
- impl < P , Q > TranslatePk < P , Q > for Wpkh < P >
514
- where
515
- P : MiniscriptKey ,
516
- Q : MiniscriptKey ,
517
- {
518
- type Output = Wpkh < Q > ;
519
-
520
- fn translate_pk < T , E > ( & self , t : & mut T ) -> Result < Self :: Output , TranslateErr < E > >
521
- where
522
- T : Translator < P , Q , E > ,
523
- {
524
- let res = Wpkh :: new ( t. pk ( & self . pk ) ?) ;
525
- match res {
526
- Ok ( pk) => Ok ( pk) ,
527
- Err ( e) => Err ( TranslateErr :: OuterError ( Error :: from ( e) ) ) ,
528
- }
529
- }
530
- }
0 commit comments