use std::{ fmt::{Debug, Display, Formatter}, path::PathBuf, }; #[derive(Debug)] pub enum Error { IOError(std::io::Error), InvalidObjectType(u32), InvalidSectionName, MissingSectionHeader(&'static str), MissingSectionData(&'static str), InvalidSectionData, ParseError(Box), LinkingError(Trace), } // "backtrace" for error origin #[derive(Debug)] pub struct Trace { origin: PathBuf, offset: u64, // 0 indicates unknown/invalid source_info: Option>, } pub trait SourceInfo: Debug + Display { fn line(&self) -> u64; // todo } impl From for Error { fn from(err: std::io::Error) -> Self { Self::IOError(err) } } impl Display for Error { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!(f, "TODO!") } } impl Display for Trace { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { write!(f, "TODO!") } }