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
use std::num::TryFromIntError;
use std::string::FromUtf8Error;
use thiserror::Error;
use cosmwasm_std::StdError;
use cw0::PaymentError;
#[derive(Error, Debug)]
pub enum Never {}
#[derive(Error, Debug, PartialEq)]
pub enum ContractError {
#[error("{0}")]
Std(#[from] StdError),
#[error("{0}")]
Payment(#[from] PaymentError),
#[error("Channel doesn't exist: {id}")]
NoSuchChannel { id: String },
#[error("Didn't send any funds")]
NoFunds {},
#[error("Amount larger than 2**64, not supported by ics20 packets")]
AmountOverflow {},
#[error("Only supports channel with ibc version ics20-1, got {version}")]
InvalidIbcVersion { version: String },
#[error("Only supports unordered channel")]
OnlyOrderedChannel {},
#[error("Insufficient funds to redeem voucher on channel")]
InsufficientFunds {},
#[error("Only accepts tokens that originate on this chain, not native tokens of remote chain")]
NoForeignTokens {},
#[error("Parsed port from denom ({port}) doesn't match packet")]
FromOtherPort { port: String },
#[error("Parsed channel from denom ({channel}) doesn't match packet")]
FromOtherChannel { channel: String },
#[error("Cannot migrate from different contract type: {previous_contract}")]
CannotMigrate { previous_contract: String },
}
impl From<FromUtf8Error> for ContractError {
fn from(_: FromUtf8Error) -> Self {
ContractError::Std(StdError::invalid_utf8("parsing denom key"))
}
}
impl From<TryFromIntError> for ContractError {
fn from(_: TryFromIntError) -> Self {
ContractError::AmountOverflow {}
}
}