use crate::cosmos_client::error::CosmosClientError;
use crate::events::EventError;
use crate::tx_builder::error::TxBuilderError;
use cosmrs::proto::prost;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum RouterError {
#[error("Tendermint Error: {0}")]
TendermintError(#[from] tendermint_rpc::Error),
#[error("Tendermint RPC Error: {0}")]
CosmrsTmError(#[from] cosmrs::tendermint::Error),
#[error("TxBuilderError Error: {0}")]
TxBuilderError(#[from] TxBuilderError),
#[error("SerdeJson Error: {0}")]
SerdeJsonError(#[from] serde_json::Error),
#[error("Eyre Error: {0}")]
EyreError(#[from] eyre::Report),
#[error("Prost Error: {0}")]
ProstError(#[from] prost::DecodeError),
#[error("CosmosClient Error: {0}")]
CosmosClientError(#[from] CosmosClientError),
#[error("Event Error: {0}")]
EventError(#[from] EventError),
#[error("Cosmwasm Std Error: {0}")]
CosmwasmStdError(#[from] cosmwasm_std::StdError),
#[error("Error while broadcasting transaction: {0}")]
BroadcastTxError(String),
#[error("Insufficient gas: GasWanted {0} - GasUsed {1}")]
InsufficientGasError(i64, i64),
#[error("Insufficient fee: {0}")]
InsufficientFeeError(String),
#[error("Not a bolt transaction")]
NotBoltTransactionError,
#[error("Market not found for base asset: {0}")]
NoMarketFound(String),
}