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}