1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
#[cfg(not(target_arch = "wasm32"))] use cosmwasm_crypto::CryptoError; #[cfg(feature = "backtraces")] use std::backtrace::Backtrace; use std::fmt::Debug; use thiserror::Error; #[derive(Error, Debug)] pub enum RecoverPubkeyError { #[error("Invalid hash format")] InvalidHashFormat, #[error("Invalid signature format")] InvalidSignatureFormat, #[error("Invalid recovery parameter. Supported values: 0 and 1.")] InvalidRecoveryParam, #[error("Unknown error: {error_code}")] UnknownErr { error_code: u32, #[cfg(feature = "backtraces")] backtrace: Backtrace, }, } impl RecoverPubkeyError { pub fn unknown_err(error_code: u32) -> Self { RecoverPubkeyError::UnknownErr { error_code, #[cfg(feature = "backtraces")] backtrace: Backtrace::capture(), } } } impl PartialEq<RecoverPubkeyError> for RecoverPubkeyError { fn eq(&self, rhs: &RecoverPubkeyError) -> bool { match self { RecoverPubkeyError::InvalidHashFormat => { matches!(rhs, RecoverPubkeyError::InvalidHashFormat) } RecoverPubkeyError::InvalidSignatureFormat => { matches!(rhs, RecoverPubkeyError::InvalidSignatureFormat) } RecoverPubkeyError::InvalidRecoveryParam => { matches!(rhs, RecoverPubkeyError::InvalidRecoveryParam) } RecoverPubkeyError::UnknownErr { error_code, .. } => { if let RecoverPubkeyError::UnknownErr { error_code: rhs_error_code, .. } = rhs { error_code == rhs_error_code } else { false } } } } } #[cfg(not(target_arch = "wasm32"))] impl From<CryptoError> for RecoverPubkeyError { fn from(original: CryptoError) -> Self { match original { CryptoError::MessageTooLong { .. } => panic!("Conversion not supported"), CryptoError::InvalidHashFormat { .. } => RecoverPubkeyError::InvalidHashFormat, CryptoError::InvalidPubkeyFormat { .. } => panic!("Conversion not supported"), CryptoError::InvalidSignatureFormat { .. } => { RecoverPubkeyError::InvalidSignatureFormat } CryptoError::GenericErr { .. } => RecoverPubkeyError::unknown_err(original.code()), CryptoError::InvalidRecoveryParam { .. } => RecoverPubkeyError::InvalidRecoveryParam, CryptoError::BatchErr { .. } => panic!("Conversion not supported"), } } }