use address::Error as AddressError;
use encoding::Error as EncodingError;
use libsecp256k1::Error as SecpError;
use std::error;
use thiserror::Error;
#[derive(Debug, PartialEq, Error)]
pub enum Error {
#[error("Failed to sign data {0}")]
SigningError(String),
#[error("Could not recover public key from signature: {0}")]
InvalidRecovery(String),
#[error("Invalid generated pub key to create address: {0}")]
InvalidPubKey(#[from] AddressError),
}
impl From<Box<dyn error::Error>> for Error {
fn from(err: Box<dyn error::Error>) -> Error {
Error::SigningError(err.to_string())
}
}
impl From<SecpError> for Error {
fn from(err: SecpError) -> Error {
match err {
SecpError::InvalidRecoveryId => Error::InvalidRecovery(format!("{:?}", err)),
_ => Error::SigningError(format!("{:?}", err)),
}
}
}
impl From<EncodingError> for Error {
fn from(err: EncodingError) -> Error {
Error::SigningError(err.to_string())
}
}