Skip to main content

vlcb_defs/
module.rs

1use crate::{MergModuleType, RocRailModuleType, SpectrumModuleType, SprogModuleType, SysPixieModuleType};
2
3
4#[derive(Debug)]
5pub struct ModuleVersion {
6    major: u8,
7    minor: char,
8    beta: u8,
9}
10
11impl ModuleVersion {
12    #[inline]
13    pub fn new(major: u8, minor: char, beta: u8) -> Self {
14        debug_assert!(
15            minor.is_ascii_alphabetic(),
16            "The minor version must be a ASCII alphabetic character"
17        );
18        Self { major, minor, beta }
19    }
20
21    #[inline]
22    pub fn major(&self) -> u8 {
23        self.major
24    }
25
26    #[inline]
27    pub fn minor(&self) -> char {
28        self.minor
29    }
30
31    #[inline]
32    pub fn beta(&self) -> u8 {
33        self.beta
34    }
35}
36
37
38pub enum ModuleType {
39    Vlcb,
40    Merg(MergModuleType),
41    Sprog(SprogModuleType),
42    RocRail(RocRailModuleType),
43    Spectrum(SpectrumModuleType),
44    SysPixie(SysPixieModuleType),
45    Generic(u8),
46}
47
48impl From<ModuleType> for u8 {
49    fn from(val: ModuleType) -> Self {
50        match val {
51            ModuleType::Vlcb => MergModuleType::VLCB.into(),
52            ModuleType::Merg(v) => v.into(),
53            ModuleType::Sprog(v) => v.into(),
54            ModuleType::RocRail(v) => v.into(),
55            ModuleType::Spectrum(v) => v.into(),
56            ModuleType::SysPixie(v) => v.into(),
57            ModuleType::Generic(v) => v,
58        }
59    }
60}