use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("bad argument {param_name}: {desc}")]
BadArgument {
param_name: String,
desc: String,
},
#[error("I/O error: {0:?}")]
Io(#[from] std::io::Error),
#[cfg(feature = "historical")]
#[error("HTTP error: {0:?}")]
Http(#[from] reqwest::Error),
#[error("internal error: {0}")]
Internal(String),
#[error("DBN error: {0}")]
Dbn(#[source] dbn::Error),
#[error("authentication failed: {0}")]
Auth(String),
}
pub type Result<T> = std::result::Result<T, Error>;
impl Error {
pub(crate) fn bad_arg(param_name: impl ToString, desc: impl ToString) -> Self {
Self::BadArgument {
param_name: param_name.to_string(),
desc: desc.to_string(),
}
}
pub(crate) fn internal(msg: impl ToString) -> Self {
Self::Internal(msg.to_string())
}
}
impl From<dbn::Error> for Error {
fn from(dbn_err: dbn::Error) -> Self {
match dbn_err {
dbn::Error::Io { source, .. } => Self::Io(source),
dbn_err => Self::Dbn(dbn_err),
}
}
}