use serde::{Serialize, Serializer}; use std::io; use thiserror::Error; use validator_client::validator_api::error::ValidatorAPIError; use validator_client::{nymd::error::NymdError, ValidatorClientError}; #[derive(Error, Debug)] pub enum BackendError { #[error("{source}")] Bip39Error { #[from] source: bip39::Error, }, #[error("{source}")] TendermintError { #[from] source: tendermint_rpc::Error, }, #[error("{source}")] NymdError { #[from] source: NymdError, }, #[error("{source}")] CosmwasmStd { #[from] source: cosmwasm_std::StdError, }, #[error("{source}")] ErrorReport { #[from] source: eyre::Report, }, #[error("{source}")] ValidatorApiError { #[from] source: ValidatorAPIError, }, #[error("{source}")] KeyDerivationError { #[from] source: argon2::Error, }, #[error("{source}")] IOError { #[from] source: io::Error, }, #[error("{source}")] SerdeJsonError { #[from] source: serde_json::Error, }, #[error("{source}")] MalformedUrlProvided { #[from] source: url::ParseError, }, #[error("{source}")] ReqwestError { #[from] source: reqwest::Error, }, #[error("failed to encrypt the given data with the provided password")] EncryptionError, #[error("failed to decrypt the given data with the provided password")] DecryptionError, #[error("Client has not been initialized yet, connect with mnemonic to initialize")] ClientNotInitialized, #[error("No balance available for address {0}")] NoBalance(String), #[error("{0} is not a valid denomination string")] InvalidDenom(String), #[error("{0} is not a valid network denomination string")] InvalidNetworkDenom(String), #[error("The provided network is not supported (yet)")] NetworkNotSupported(config::defaults::all::Network), #[error("Could not access the local data storage directory")] UnknownStorageDirectory, #[error("No validator API URL configured")] NoValidatorApiUrlConfigured, #[error("The wallet file already exists")] WalletFileAlreadyExists, #[error("The wallet file is not found")] WalletFileNotFound, #[error("Login ID not found in wallet")] WalletNoSuchLoginId, #[error("Account ID not found in wallet login")] WalletNoSuchAccountIdInWalletLogin, #[error("Login ID already found in wallet")] WalletLoginIdAlreadyExists, #[error("Account ID already found in wallet login")] WalletAccountIdAlreadyExistsInWalletLogin, #[error("Adding a different password to the wallet not currently supported")] WalletDifferentPasswordDetected, #[error("Unexpted mnemonic account for login")] WalletUnexpectedMnemonicAccount, #[error("Unexpted multiple account entry for login")] WalletUnexpectedMultipleAccounts, #[error("Failed to derive address from mnemonic")] FailedToDeriveAddress, } impl Serialize for BackendError { fn serialize(&self, serializer: S) -> Result where S: Serializer, { serializer.collect_str(self) } } impl From for BackendError { fn from(e: ValidatorClientError) -> Self { match e { ValidatorClientError::ValidatorAPIError { source } => source.into(), ValidatorClientError::MalformedUrlProvided(e) => e.into(), ValidatorClientError::NymdError(e) => e.into(), } } }