@@ -333,12 +333,14 @@ impl DescriptorMultiXKey<bip32::Xpriv> {
333
333
#[ allow( missing_docs) ]
334
334
pub enum NonDefiniteKeyError {
335
335
Wildcard ,
336
+ Multipath ,
336
337
}
337
338
338
339
impl fmt:: Display for NonDefiniteKeyError {
339
340
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
340
341
match * self {
341
342
Self :: Wildcard => f. write_str ( "key with a wildcard cannot be a DerivedDescriptorKey" ) ,
343
+ Self :: Multipath => f. write_str ( "multipath key cannot be a DerivedDescriptorKey" ) ,
342
344
}
343
345
}
344
346
}
@@ -1270,11 +1272,13 @@ impl DefiniteDescriptorKey {
1270
1272
/// Construct an instance from a descriptor key and a derivation index
1271
1273
///
1272
1274
/// Returns `None` if the key contains a wildcard
1273
- pub fn new ( key : DescriptorPublicKey ) -> Option < Self > {
1275
+ pub fn new ( key : DescriptorPublicKey ) -> Result < Self , NonDefiniteKeyError > {
1274
1276
if key. has_wildcard ( ) {
1275
- None
1277
+ Err ( NonDefiniteKeyError :: Wildcard )
1278
+ } else if key. is_multipath ( ) {
1279
+ Err ( NonDefiniteKeyError :: Multipath )
1276
1280
} else {
1277
- Some ( Self ( key) )
1281
+ Ok ( Self ( key) )
1278
1282
}
1279
1283
}
1280
1284
@@ -1303,9 +1307,8 @@ impl FromStr for DefiniteDescriptorKey {
1303
1307
type Err = DescriptorKeyParseError ;
1304
1308
1305
1309
fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
1306
- let inner = DescriptorPublicKey :: from_str ( s) ?;
1307
- DefiniteDescriptorKey :: new ( inner)
1308
- . ok_or ( DescriptorKeyParseError :: NonDefiniteKey ( NonDefiniteKeyError :: Wildcard ) )
1310
+ let d = DescriptorPublicKey :: from_str ( s) ?;
1311
+ DefiniteDescriptorKey :: new ( d) . map_err ( DescriptorKeyParseError :: NonDefiniteKey )
1309
1312
}
1310
1313
}
1311
1314
0 commit comments