pub type Result<T, E = Error> = std::result::Result<T, E>;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("malformed {format} at {offset:#x}: {reason}")]
Malformed {
format: &'static str,
offset: u64,
reason: &'static str,
},
#[error("not found: {0}")]
NotFound(String),
#[error("unsupported: {0}")]
Unsupported(String),
#[error("host error: {0}")]
Host(String),
#[error(transparent)]
Json(#[from] serde_json::Error),
}
impl Error {
pub(crate) fn malformed(format: &'static str, offset: u64, reason: &'static str) -> Self {
Self::Malformed {
format,
offset,
reason,
}
}
}
impl From<std::io::Error> for Error {
fn from(error: std::io::Error) -> Self {
Self::Host(error.to_string())
}
}