@@ -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
}
@@ -1271,11 +1273,13 @@ impl DefiniteDescriptorKey {
1271
1273
/// Construct an instance from a descriptor key and a derivation index
1272
1274
///
1273
1275
/// Returns `None` if the key contains a wildcard
1274
- pub fn new ( key : DescriptorPublicKey ) -> Option < Self > {
1276
+ pub fn new ( key : DescriptorPublicKey ) -> Result < Self , NonDefiniteKeyError > {
1275
1277
if key. has_wildcard ( ) {
1276
- None
1278
+ Err ( NonDefiniteKeyError :: Wildcard )
1279
+ } else if key. is_multipath ( ) {
1280
+ Err ( NonDefiniteKeyError :: Multipath )
1277
1281
} else {
1278
- Some ( Self ( key) )
1282
+ Ok ( Self ( key) )
1279
1283
}
1280
1284
}
1281
1285
@@ -1304,9 +1308,8 @@ impl FromStr for DefiniteDescriptorKey {
1304
1308
type Err = DescriptorKeyParseError ;
1305
1309
1306
1310
fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
1307
- let inner = DescriptorPublicKey :: from_str ( s) ?;
1308
- DefiniteDescriptorKey :: new ( inner)
1309
- . ok_or ( DescriptorKeyParseError :: NonDefiniteKey ( NonDefiniteKeyError :: Wildcard ) )
1311
+ let d = DescriptorPublicKey :: from_str ( s) ?;
1312
+ DefiniteDescriptorKey :: new ( d) . map_err ( DescriptorKeyParseError :: NonDefiniteKey )
1310
1313
}
1311
1314
}
1312
1315
0 commit comments