use crate::Types::Byte;
use crate::{Machine, PayloadType};

pub struct Instruction {
    pub code: Byte,
    pub name: String,
    pub payload: PayloadType,
    pub function: InstructionFunction,
}

pub type InstructionFunction = fn(machine: &mut Machine) -> bool;

impl Instruction {
    #[inline]
    pub fn New(
        code: Byte,
        name: &str,
        payload: PayloadType,
        function: InstructionFunction,
    ) -> Self {
        Self {
            code,
            name: name.to_string(),
            payload,
            function,
        }
    }
}