Skip to content

Commit a7997c6

Browse files
committed
key.rs: split "definite keys cannot have wildcards" into own error
1 parent bd5db6a commit a7997c6

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

src/descriptor/key.rs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,24 @@ impl DescriptorMultiXKey<bip32::Xpriv> {
327327
}
328328
}
329329

330+
/// Kinds of malformed key data
331+
#[derive(Debug, PartialEq, Clone)]
332+
#[non_exhaustive]
333+
#[allow(missing_docs)]
334+
pub enum NonDefiniteKeyError {
335+
Wildcard,
336+
}
337+
338+
impl fmt::Display for NonDefiniteKeyError {
339+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
340+
match *self {
341+
Self::Wildcard => f.write_str("key with a wildcard cannot be a DerivedDescriptorKey"),
342+
}
343+
}
344+
}
345+
346+
impl error::Error for NonDefiniteKeyError {}
347+
330348
/// Kinds of malformed key data
331349
#[derive(Debug, PartialEq, Clone)]
332350
#[non_exhaustive]
@@ -346,7 +364,6 @@ pub enum MalformedKeyDataKind {
346364
NoKeyAfterOrigin,
347365
NoMasterFingerprintFound,
348366
UnclosedSquareBracket,
349-
WildcardAsDerivedDescriptorKey,
350367
}
351368

352369
impl fmt::Display for MalformedKeyDataKind {
@@ -366,7 +383,6 @@ impl fmt::Display for MalformedKeyDataKind {
366383
Self::NoKeyAfterOrigin => "no key after origin",
367384
Self::NoMasterFingerprintFound => "no master fingerprint found after '['",
368385
Self::UnclosedSquareBracket => "unclosed '['",
369-
Self::WildcardAsDerivedDescriptorKey => "cannot parse key with a wilcard as a DerivedDescriptorKey",
370386
};
371387

372388
f.write_str(err)
@@ -401,6 +417,8 @@ pub enum DescriptorKeyParseError {
401417
/// The underlying parse error
402418
err: bitcoin::hex::HexToArrayError,
403419
},
420+
/// Attempt to construct a [`DefiniteDescriptorKey`] from an ambiguous key.
421+
NonDefiniteKey(NonDefiniteKeyError),
404422
/// Error while parsing a simple public key.
405423
FullPublicKey(bitcoin::key::ParsePublicKeyError),
406424
/// Error while parsing a WIF private key.
@@ -423,6 +441,7 @@ impl fmt::Display for DescriptorKeyParseError {
423441
Self::MasterFingerprint { fingerprint, err } => {
424442
write!(f, "on master fingerprint '{fingerprint}': {err}")
425443
}
444+
Self::NonDefiniteKey(err) => err.fmt(f),
426445
Self::FullPublicKey(err) => err.fmt(f),
427446
Self::WifPrivateKey(err) => err.fmt(f),
428447
Self::XonlyPublicKey(err) => err.fmt(f),
@@ -440,6 +459,7 @@ impl error::Error for DescriptorKeyParseError {
440459
| Self::DeriveHardenedKey(err)
441460
| Self::MasterDerivationPath(err) => Some(err),
442461
Self::MasterFingerprint { err, .. } => Some(err),
462+
Self::NonDefiniteKey(err) => Some(err),
443463
Self::FullPublicKey(err) => Some(err),
444464
Self::WifPrivateKey(err) => Some(err),
445465
Self::XonlyPublicKey(err) => Some(err),
@@ -1284,9 +1304,8 @@ impl FromStr for DefiniteDescriptorKey {
12841304

12851305
fn from_str(s: &str) -> Result<Self, Self::Err> {
12861306
let inner = DescriptorPublicKey::from_str(s)?;
1287-
DefiniteDescriptorKey::new(inner).ok_or(DescriptorKeyParseError::MalformedKeyData(
1288-
MalformedKeyDataKind::WildcardAsDerivedDescriptorKey,
1289-
))
1307+
DefiniteDescriptorKey::new(inner)
1308+
.ok_or(DescriptorKeyParseError::NonDefiniteKey(NonDefiniteKeyError::Wildcard))
12901309
}
12911310
}
12921311

0 commit comments

Comments
 (0)