use std::convert::{TryFrom, Into}; use serde::{Serialize, Deserialize}; #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize, enum_utils::FromStr, derive_more::Display)] pub enum UnitType { None } impl UnitType { pub fn value(&self) -> [u8; 3] { match self { UnitType::None => [0; 3] } } } #[derive(Debug, Copy, Clone, PartialEq)] pub enum UnitModifier { PlusPlus, Plus, Minus, MinusMinus, } #[derive(Debug, Copy, Clone, PartialEq)] pub struct Unit { pub unit: UnitType, pub modifier: UnitModifier, } impl Unit { pub fn as_bytes(&self) -> [u8; 16] { let mut result = [0; 16]; result[0..3].copy_from_slice(&self.unit.value()); match self.modifier { UnitModifier::PlusPlus => { result[7] = 3; }, UnitModifier::Plus => { result[7] = 1; }, UnitModifier::Minus => { result[7] = 0xFF; result[8] = 0xFF; }, UnitModifier::MinusMinus => { result[7] = 0xFE; result[8] = 0xFF; }, } result } }