secret_cosmwasm_std/errors/
recover_pubkey_error.rs1#[cfg(not(target_arch = "wasm32"))]
2use secret_cosmwasm_crypto::CryptoError;
3#[cfg(feature = "backtraces")]
4use std::backtrace::Backtrace;
5use std::fmt::Debug;
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 CryptoError::InvalidPrivateKeyFormat { .. } => {
74 RecoverPubkeyError::UnknownErr {
76 error_code: 0,
77 #[cfg(feature = "backtraces")]
78 backtrace: Backtrace::capture(),
79 }
80 }
81 }
82 }
83}