macro_rules! define_operand_expecters {
(
opcode = $opcode_ty:ty,
operands = $operands_ty:ty,
label = $opcode_label:path,
$(
fn $name:ident($expected:literal) -> $result:ty {
$( $pattern:pat => $value:expr ),+ $(,)?
}
)+
) => {
$(
fn $name(
raw_pc: u32,
opcode: $opcode_ty,
operands: &$operands_ty,
) -> Result<$result, crate::transformer::TransformError> {
match operands {
$( $pattern => Ok($value), )+
_ => Err(crate::transformer::TransformError::UnexpectedOperands {
raw_pc,
opcode: $opcode_label(opcode),
expected: $expected,
}),
}
}
)+
};
}
pub(crate) use define_operand_expecters;