use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("cryptographic operation failed: {0}")]
Crypto(String),
#[error("{0}")]
EnvVar(#[from] std::env::VarError),
#[error("{0}")]
FromUtf8(#[from] std::string::FromUtf8Error),
#[error("{0}")]
FromUtf8Str(#[from] std::str::Utf8Error),
#[cfg(feature = "data-encoding")]
#[error("{0}")]
HexDecode(#[from] data_encoding::DecodeError),
#[cfg(feature = "reqwest")]
#[error("{0}")]
Http(#[from] reqwest::Error),
#[error("HTTP request failed despite retries: {0}")]
HttpRetry(String),
#[error("input too big: {0}")]
InputTooBig(String),
#[error("internal error: {0}")]
Internal(String),
#[error("invalid argument: {0}")]
InvalidArgument(String),
#[error("{0}")]
Io(#[from] std::io::Error),
#[cfg(feature = "serde_json")]
#[error("{0}")]
Json(#[from] serde_json::Error),
#[cfg(feature = "rmp-serde")]
#[error("{0}")]
MsgDecode(#[from] rmp_serde::decode::Error),
#[cfg(feature = "rmp-serde")]
#[error("{0}")]
MsgEncode(#[from] rmp_serde::encode::Error),
#[error("not found: {0}")]
NotFound(String),
#[error("{0}")]
Nul(#[from] std::ffi::NulError),
#[error("{0}")]
ParseInt(#[from] std::num::ParseIntError),
#[error("{0}")]
ParseIpAddr(#[from] std::net::AddrParseError),
#[error("precondition not satisfied: {0}")]
Precondition(String),
#[error("{0}")]
StringParse(#[from] std::string::ParseError),
#[cfg(feature = "url")]
#[error("{0}")]
Url(#[from] url::ParseError),
}
pub type Result<T> = std::result::Result<T, Error>;