use thiserror::Error as ThisError;
#[derive(Debug, ThisError)]
pub enum Error {
#[error("IO error: `{0}`")]
IoError(#[from] std::io::Error),
#[error("Unable to locate binary: `{0}`")]
WhichError(#[from] which::Error),
#[error("Channel receive error: `{0}`")]
ChannelReceiveError(#[from] std::sync::mpsc::RecvError),
#[error("Channel send error: `{0}`")]
ChannelSendError(String),
#[error("ELF parse error: `{0}`")]
ElfError(#[from] elf::parse::ParseError),
#[error("String extraction error: `{0}`")]
StringsError(String),
#[error("Hexdump (heh) error: `{0}`")]
HexdumpError(String),
#[error("Tracing system call error: `{0}`")]
TraceError(String),
#[error("Failed to parse integer: `{0}`")]
IntParseError(#[from] std::num::TryFromIntError),
#[error("Dependency analysis error: `{0}`")]
LddError(#[from] lddtree::Error),
}
pub type Result<T> = std::result::Result<T, Error>;
#[cfg(test)]
mod tests {
use super::*;
use pretty_assertions::assert_eq;
use std::io::Error as IoError;
#[test]
fn test_error() {
let message = "your computer is on fire!";
let error = Error::from(IoError::other(message));
assert_eq!(format!("IO error: `{message}`"), error.to_string());
assert_eq!(
format!("\"IO error: `{message}`\""),
format!("{:?}", error.to_string())
);
}
}