1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
use std::io; #[derive(Debug)] pub enum DisassemblyError { IOError(io::Error), InvalidHexCharacter, TooFewBytesForPush, } impl std::cmp::PartialEq for DisassemblyError { fn eq(&self, other: &Self) -> bool { match other { DisassemblyError::IOError(rhs) => { if let DisassemblyError::IOError(lhs) = self { rhs.kind() == lhs.kind() } else { false } } DisassemblyError::InvalidHexCharacter => { if let DisassemblyError::InvalidHexCharacter = other { true } else { false } } DisassemblyError::TooFewBytesForPush => { if let DisassemblyError::TooFewBytesForPush = other { true } else { false } } } } } impl std::convert::From<io::Error> for DisassemblyError { fn from(err: io::Error) -> Self { DisassemblyError::IOError(err) } } impl std::convert::From<hex::FromHexError> for DisassemblyError { fn from(_: hex::FromHexError) -> Self { DisassemblyError::InvalidHexCharacter } } impl std::fmt::Display for DisassemblyError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::IOError(err) => write!(f, "Encountered IO error: {}!", err), Self::InvalidHexCharacter => write!(f, "Encountered invalid hex character!"), Self::TooFewBytesForPush => { write!(f, "Too few bytes availabe to parse push operation!") } } } } impl std::error::Error for DisassemblyError {}