use bitcoin::bech32;
use bitcoin::bech32::{FromBase32, ToBase32};
+use bitcoin::secp256k1;
use core::convert::TryFrom;
use core::fmt;
use crate::io;
Decode(DecodeError),
/// The parsed message has invalid semantics.
InvalidSemantics(SemanticError),
+ /// The parsed message has an invalid signature.
+ InvalidSignature(secp256k1::Error),
}
/// Error when interpreting a TLV stream as a specific type.
#[derive(Debug, PartialEq)]
pub enum SemanticError {
+ /// The provided chain hash does not correspond to a supported chain.
+ UnsupportedChain,
/// An amount was expected but was missing.
MissingAmount,
/// The amount exceeded the total bitcoin supply.
InvalidAmount,
+ /// An amount was provided but was not sufficient in value.
+ InsufficientAmount,
/// A currency was provided that is not supported.
UnsupportedCurrency,
/// A required description was not provided.
MissingDescription,
/// A signing pubkey was not provided.
MissingSigningPubkey,
+ /// A quantity was expected but was missing.
+ MissingQuantity,
/// An unsupported quantity was provided.
InvalidQuantity,
+ /// A quantity or quantity bounds was provided but was not expected.
+ UnexpectedQuantity,
+ /// Payer metadata was expected but was missing.
+ MissingPayerMetadata,
+ /// A payer id was expected but was missing.
+ MissingPayerId,
}
impl From<bech32::Error> for ParseError {
Self::InvalidSemantics(error)
}
}
+
+impl From<secp256k1::Error> for ParseError {
+ fn from(error: secp256k1::Error) -> Self {
+ Self::InvalidSignature(error)
+ }
+}