1#![allow(missing_docs)]
2
3use reqwest::StatusCode;
4use std::string::FromUtf8Error;
5use thiserror::Error;
6
7#[derive(Error, Debug)]
8pub enum TerraRustAPIError {
9 #[error("Reqwest HTTP(s) Error")]
10 ReqwestError(#[from] ::reqwest::Error),
11 #[error("Decimal Conversion Error")]
12 RustDecimal(#[from] ::rust_decimal::Error),
13 #[error("JSON Conversion Error")]
14 SerdeJson(#[from] ::serde_json::Error),
15 #[error(transparent)]
16 IOErr(#[from] ::std::io::Error),
17 #[error(transparent)]
18 ED25519(#[from] ::ed25519_dalek::ed25519::Error),
19 #[error(transparent)]
20 DecodeError(#[from] ::base64::DecodeError),
21 #[error(transparent)]
22 SubtleError(#[from] ::subtle_encoding::Error),
23 #[error(transparent)]
24 UTF8Error(#[from] FromUtf8Error),
25 #[error(transparent)]
26 BitCoinBip32(#[from] ::bitcoin::util::bip32::Error),
27 #[error(transparent)]
28 HexError(#[from] ::hex::FromHexError),
29 #[error(transparent)]
30 Secp256k1(#[from] ::secp256k1::Error),
31
32 #[error("Terra `{0}` CLI Error")]
33 Terra(String),
34 #[error("Terra `{0}` LCD - {1}")]
35 TerraLCDResponse(StatusCode, String),
36 #[error("Bech32 Decode Error")]
37 Bech32DecodeErr,
38 #[error("Bech32 Decode Error: Key Failed prefix {0} or length {1} Wanted:{2}/{3}")]
39 Bech32DecodeExpanded(String, usize, String, usize),
40 #[error("Mnemonic - Bad Phrase")]
41 Phrasing,
42 #[error("Mnemonic - Missing Phrase")]
43 MissingPhrase,
44 #[error("Bad Implementation. Missing Component")]
45 Implementation,
46 #[error("Unable to convert into public key `{key}`")]
47 Conversion {
48 key: String,
49 source: bitcoin::bech32::Error,
50 },
51 #[error("83 length-missing SECP256K1 prefix")]
52 ConversionSECP256k1,
53 #[error("82 length-missing ED25519 prefix")]
54 ConversionED25519,
55 #[error("Expected Key length of 82 or 83 length was {0}")]
56 ConversionLength(usize),
57 #[error("Expected Key length of 40 length was {0}")]
58 ConversionLengthED25519Hex(usize),
59 #[error("Expected ED25519 key of length 32 with a BECH32 ED25519 prefix of 5 chars - Len {0} - Hex {1}")]
60 ConversionPrefixED25519(usize, String),
61 #[error("Can't call Transactions without some gas rules")]
62 NoGasOpts,
63 #[error("Can't parse `{parse}` into a coin")]
64 CoinParseErrV { parse: String },
65 #[error("Can't parse `{0}` into a coin")]
66 CoinParseErr(String),
67 #[error("TX submit returned `{0}` - {1} '{2}'")]
68 TxResultError(usize, String, String),
69 #[error("No price found for Gas using denom {0}")]
70 GasPriceError(String),
71 #[error("Attempting to fetch validator set in parts, and failed Height mismatch {0} {1}")]
72 TendermintValidatorSet(u64, u64),
73 #[error("Transaction {0} not found after {1} attempts")]
74 TXNotFound(String, usize),
75 #[error("unknown Terra-Rust API error")]
76 Unknown,
77 #[error("Generic Error {0}")]
78 StdErr(String),
79}