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 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}