cw20_staking/
error.rs

1use cosmwasm_std::{StdError, Uint128};
2use thiserror::Error;
3
4#[derive(Error, Debug, PartialEq)]
5pub enum ContractError {
6    #[error("{0}")]
7    Std(#[from] StdError),
8
9    #[error("Unauthorized")]
10    Unauthorized {},
11
12    #[error("Validator '{validator}' not in current validator set")]
13    NotInValidatorSet { validator: String },
14
15    #[error("Different denominations in bonds: '{denom1}' vs. '{denom2}'")]
16    DifferentBondDenom { denom1: String, denom2: String },
17
18    #[error("Stored bonded {stored}, but query bonded {queried}")]
19    BondedMismatch { stored: Uint128, queried: Uint128 },
20
21    #[error("No {denom} tokens sent")]
22    EmptyBalance { denom: String },
23
24    #[error("Must unbond at least {min_bonded} {denom}")]
25    UnbondTooSmall { min_bonded: Uint128, denom: String },
26
27    #[error("Insufficient balance in contract to process claim")]
28    BalanceTooSmall {},
29
30    #[error("No claims that can be released currently")]
31    NothingToClaim {},
32
33    #[error("Cannot set to own account")]
34    CannotSetOwnAccount {},
35
36    #[error("Invalid zero amount")]
37    InvalidZeroAmount {},
38
39    #[error("Allowance is expired")]
40    Expired {},
41
42    #[error("No allowance for this account")]
43    NoAllowance {},
44
45    #[error("Minting cannot exceed the cap")]
46    CannotExceedCap {},
47}
48
49impl From<cw20_base::ContractError> for ContractError {
50    fn from(err: cw20_base::ContractError) -> Self {
51        match err {
52            cw20_base::ContractError::Std(error) => ContractError::Std(error),
53            cw20_base::ContractError::Unauthorized {} => ContractError::Unauthorized {},
54            cw20_base::ContractError::CannotSetOwnAccount {} => {
55                ContractError::CannotSetOwnAccount {}
56            }
57            cw20_base::ContractError::InvalidZeroAmount {} => ContractError::InvalidZeroAmount {},
58            cw20_base::ContractError::Expired {} => ContractError::Expired {},
59            cw20_base::ContractError::NoAllowance {} => ContractError::NoAllowance {},
60            cw20_base::ContractError::CannotExceedCap {} => ContractError::CannotExceedCap {},
61            // This should never happen, as this contract doesn't use logo
62            cw20_base::ContractError::LogoTooBig {}
63            | cw20_base::ContractError::InvalidPngHeader {}
64            | cw20_base::ContractError::InvalidXmlPreamble {} => {
65                ContractError::Std(StdError::generic_err(err.to_string()))
66            }
67        }
68    }
69}