@@ -329,6 +329,43 @@ impl<Pk: MiniscriptKey> Descriptor<Pk> {
329
329
Descriptor :: Tr ( ref _tr) => DescriptorType :: Tr ,
330
330
}
331
331
}
332
+
333
+ /// .
334
+ /// Convert a Descriptor into [`pretaproot::PreTaprootDescriptor`]
335
+ /// # Examples
336
+ ///
337
+ /// ```
338
+ /// use std::str::FromStr;
339
+ /// use miniscript::descriptor::Descriptor;
340
+ /// use miniscript::{PreTaprootDescriptor, PreTaprootDescriptorTrait};
341
+ /// use miniscript::bitcoin;
342
+ ///
343
+ /// // A descriptor with a string generic
344
+ /// let desc = Descriptor::<bitcoin::PublicKey>::from_str("wpkh(02e18f242c8b0b589bfffeac30e1baa80a60933a649c7fb0f1103e78fbf58aa0ed)")
345
+ /// .expect("Valid segwitv0 descriptor");
346
+ /// let pre_tap_desc = desc.into_pre_taproot_desc().expect("Wsh is pre taproot");
347
+ ///
348
+ /// // Now the script code and explicit script no longer fail on longer fail
349
+ /// // on PreTaprootDescriptor using PreTaprootDescriptorTrait
350
+ /// let script_code = pre_tap_desc.script_code();
351
+ /// assert_eq!(script_code.to_string(),
352
+ /// "Script(OP_DUP OP_HASH160 OP_PUSHBYTES_20 62107d047e8818b594303fe0657388cc4fc8771f OP_EQUALVERIFY OP_CHECKSIG)"
353
+ /// );
354
+ /// ```
355
+ ///
356
+ /// # Errors
357
+ ///
358
+ /// This function will return an error if descriptor is not a pre taproot descriptor.
359
+ pub fn into_pre_taproot_desc ( self ) -> Result < pretaproot:: PreTaprootDescriptor < Pk > , Self > {
360
+ match self {
361
+ Descriptor :: Bare ( bare) => Ok ( pretaproot:: PreTaprootDescriptor :: Bare ( bare) ) ,
362
+ Descriptor :: Pkh ( pkh) => Ok ( pretaproot:: PreTaprootDescriptor :: Pkh ( pkh) ) ,
363
+ Descriptor :: Wpkh ( wpkh) => Ok ( pretaproot:: PreTaprootDescriptor :: Wpkh ( wpkh) ) ,
364
+ Descriptor :: Sh ( sh) => Ok ( pretaproot:: PreTaprootDescriptor :: Sh ( sh) ) ,
365
+ Descriptor :: Wsh ( wsh) => Ok ( pretaproot:: PreTaprootDescriptor :: Wsh ( wsh) ) ,
366
+ Descriptor :: Tr ( tr) => Err ( Descriptor :: Tr ( tr) ) ,
367
+ }
368
+ }
332
369
}
333
370
334
371
impl < P : MiniscriptKey , Q : MiniscriptKey > TranslatePk < P , Q > for Descriptor < P > {
0 commit comments