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