refactor 2 electric boogaloo
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
//! All the errors that may be returned from [`instructions`].
|
||||
|
||||
use crate::prelude::*;
|
||||
|
||||
#[derive(Debug)]
|
||||
/// Error type for parsing register numbers.
|
||||
pub enum RegisterParseError {
|
||||
InvalidIndex(u8),
|
||||
}
|
||||
|
||||
impl std::fmt::Display for RegisterParseError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
Self::InvalidIndex(idx) => write!(f, "invalid index given ({idx})"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl std::error::Error for RegisterParseError {}
|
||||
|
||||
/// A list of errors that can be returned when decoding instructions.
|
||||
#[derive(Debug)]
|
||||
pub enum InstructionDecodeError {
|
||||
/// Some field was incorrect. Returns an error for debugging purposes.
|
||||
InvalidArgument(ArgsDecodeError),
|
||||
/// Some opcode was invalid. Returns the offending opcode for debugging purposes etc.
|
||||
InvalidOpcode(u8),
|
||||
}
|
||||
|
||||
impl From<ArgsDecodeError> for InstructionDecodeError {
|
||||
fn from(err: ArgsDecodeError) -> Self {
|
||||
Self::InvalidArgument(err)
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for InstructionDecodeError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
Self::InvalidOpcode(code) => write!(f, "invalid opcode, got {code:x}")?,
|
||||
Self::InvalidArgument(err) => write!(f, "invalid arguments, got an error {err}")?,
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl std::error::Error for InstructionDecodeError {
|
||||
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
|
||||
match self {
|
||||
Self::InvalidArgument(err) => Some(err),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user