use thiserror::Error;
#[derive(Debug, Error)]
pub enum ZeraError {
#[error("feature not implemented yet: {0}")]
NotImplemented(&'static str),
#[error("invalid configuration: {0}")]
InvalidConfig(String),
#[error("invalid input: {0}")]
InvalidInput(String),
#[error("validation error: {0}")]
Validation(String),
#[error("rpc error: {0}")]
Rpc(String),
#[error("transport error: {0}")]
Transport(String),
#[error("serialization error: {0}")]
Serialization(String),
#[error("crypto error: {0}")]
Crypto(String),
#[error("unsupported operation: {0}")]
Unsupported(String),
#[error(transparent)]
Reqwest(#[from] reqwest::Error),
#[error(transparent)]
ProstEncode(#[from] prost::EncodeError),
#[error(transparent)]
ProstDecode(#[from] prost::DecodeError),
#[error(transparent)]
Base58(#[from] bs58::decode::Error),
#[error(transparent)]
Base64Decode(#[from] base64::DecodeError),
#[error(transparent)]
SerdeJson(#[from] serde_json::Error),
}
pub type Result<T> = std::result::Result<T, ZeraError>;