m8-files 0.3.1

Parse the Dirtywave M8's file formats
Documentation
use crate::Version;

use super::{M8Result, Reader, Writer};

const TRACKING_ENV_COMMAND_NAMES: [[&'static str; 5]; 4] = [
    ["TA1", "TS1", "TL1", "TH1", "TX1"],
    ["TA2", "TS2", "TL2", "TH2", "TX2"],
    ["TA3", "TS3", "TL3", "TH3", "TX3"],
    ["TA4", "TS4", "TL4", "TH4", "TX4"],
];

#[derive(PartialEq, Debug, Clone)]
pub struct TrackingEnv {
    pub dest: u8,
    pub amount: u8,
    pub src: u8,
    pub lval: u8,
    pub hval: u8,
}

impl TrackingEnv {
    pub fn command_name(_ver: Version, env_id: usize) -> &'static [&'static str] {
        &TRACKING_ENV_COMMAND_NAMES[env_id]
    }

    pub fn write(&self, writer: &mut Writer) {
        writer.write(self.amount);
        writer.write(self.src);
        writer.write(self.lval);
        writer.write(self.hval);
    }

    pub fn from_reader(reader: &mut Reader, dest: u8) -> M8Result<Self> {
        Ok(Self {
            dest,
            amount: reader.read(),
            src: reader.read(),
            lval: reader.read(),
            hval: reader.read(),
        })
    }
}