@@ -48,6 +48,42 @@ impl WrapMiniscript {
4848 pub fn to_asm_string ( & self ) -> Result < String , JsError > {
4949 unwrap_apply ! ( & self . 0 , |ms| Ok ( ms. encode( ) . to_asm_string( ) ) )
5050 }
51+
52+ #[ wasm_bindgen( js_name = fromString, skip_typescript) ]
53+ pub fn from_string ( script : & str , context_type : & str ) -> Result < WrapMiniscript , JsError > {
54+ match context_type {
55+ "tap" => Ok ( WrapMiniscript :: from (
56+ Miniscript :: < XOnlyPublicKey , Tap > :: from_str ( script) . map_err ( JsError :: from) ?,
57+ ) ) ,
58+ "segwitv0" => Ok ( WrapMiniscript :: from (
59+ Miniscript :: < PublicKey , Segwitv0 > :: from_str ( script) . map_err ( JsError :: from) ?,
60+ ) ) ,
61+ "legacy" => Ok ( WrapMiniscript :: from (
62+ Miniscript :: < PublicKey , Legacy > :: from_str ( script) . map_err ( JsError :: from) ?,
63+ ) ) ,
64+ _ => Err ( JsError :: new ( "Invalid context type" ) ) ,
65+ }
66+ }
67+
68+ #[ wasm_bindgen( js_name = fromBitcoinScript, skip_typescript) ]
69+ pub fn from_bitcoin_script (
70+ script : & [ u8 ] ,
71+ context_type : & str ,
72+ ) -> Result < WrapMiniscript , JsError > {
73+ let script = bitcoin:: Script :: from_bytes ( script) ;
74+ match context_type {
75+ "tap" => Ok ( WrapMiniscript :: from (
76+ Miniscript :: < XOnlyPublicKey , Tap > :: parse ( script) . map_err ( JsError :: from) ?,
77+ ) ) ,
78+ "segwitv0" => Ok ( WrapMiniscript :: from (
79+ Miniscript :: < PublicKey , Segwitv0 > :: parse ( script) . map_err ( JsError :: from) ?,
80+ ) ) ,
81+ "legacy" => Ok ( WrapMiniscript :: from (
82+ Miniscript :: < PublicKey , Legacy > :: parse ( script) . map_err ( JsError :: from) ?,
83+ ) ) ,
84+ _ => Err ( JsError :: new ( "Invalid context type" ) ) ,
85+ }
86+ }
5187}
5288
5389impl From < Miniscript < XOnlyPublicKey , Tap > > for WrapMiniscript {
@@ -68,42 +104,6 @@ impl From<Miniscript<PublicKey, Legacy>> for WrapMiniscript {
68104 }
69105}
70106
71- #[ wasm_bindgen]
72- pub fn miniscript_from_string ( script : & str , context_type : & str ) -> Result < WrapMiniscript , JsError > {
73- match context_type {
74- "tap" => Ok ( WrapMiniscript :: from (
75- Miniscript :: < XOnlyPublicKey , Tap > :: from_str ( script) . map_err ( JsError :: from) ?,
76- ) ) ,
77- "segwitv0" => Ok ( WrapMiniscript :: from (
78- Miniscript :: < PublicKey , Segwitv0 > :: from_str ( script) . map_err ( JsError :: from) ?,
79- ) ) ,
80- "legacy" => Ok ( WrapMiniscript :: from (
81- Miniscript :: < PublicKey , Legacy > :: from_str ( script) . map_err ( JsError :: from) ?,
82- ) ) ,
83- _ => Err ( JsError :: new ( "Invalid context type" ) ) ,
84- }
85- }
86-
87- #[ wasm_bindgen]
88- pub fn miniscript_from_bitcoin_script (
89- script : & [ u8 ] ,
90- context_type : & str ,
91- ) -> Result < WrapMiniscript , JsError > {
92- let script = bitcoin:: Script :: from_bytes ( script) ;
93- match context_type {
94- "tap" => Ok ( WrapMiniscript :: from (
95- Miniscript :: < XOnlyPublicKey , Tap > :: parse ( script) . map_err ( JsError :: from) ?,
96- ) ) ,
97- "segwitv0" => Ok ( WrapMiniscript :: from (
98- Miniscript :: < PublicKey , Segwitv0 > :: parse ( script) . map_err ( JsError :: from) ?,
99- ) ) ,
100- "legacy" => Ok ( WrapMiniscript :: from (
101- Miniscript :: < PublicKey , Legacy > :: parse ( script) . map_err ( JsError :: from) ?,
102- ) ) ,
103- _ => Err ( JsError :: new ( "Invalid context type" ) ) ,
104- }
105- }
106-
107107#[ test]
108108pub fn panic_xprv ( ) {
109109 use miniscript:: bitcoin:: secp256k1:: Secp256k1 ;
0 commit comments