#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NumberModel {
FloatOnly,
Dual,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum LuaVersion {
V51,
V52,
V53,
V54,
V55,
}
impl Default for LuaVersion {
fn default() -> Self {
LuaVersion::V54
}
}
impl LuaVersion {
pub fn number_model(self) -> NumberModel {
match self {
LuaVersion::V51 | LuaVersion::V52 => NumberModel::FloatOnly,
LuaVersion::V53 | LuaVersion::V54 | LuaVersion::V55 => NumberModel::Dual,
}
}
pub fn is_supported(self) -> bool {
matches!(self, LuaVersion::V53 | LuaVersion::V54 | LuaVersion::V55)
}
pub fn version_str(self) -> &'static str {
match self {
LuaVersion::V51 => "Lua 5.1",
LuaVersion::V52 => "Lua 5.2",
LuaVersion::V53 => "Lua 5.3",
LuaVersion::V54 => "Lua 5.4",
LuaVersion::V55 => "Lua 5.5",
}
}
pub fn luac_version_byte(self) -> u8 {
match self {
LuaVersion::V51 => 0x51,
LuaVersion::V52 => 0x52,
LuaVersion::V53 => 0x53,
LuaVersion::V54 => 0x54,
LuaVersion::V55 => 0x55,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_v54() {
assert_eq!(LuaVersion::default(), LuaVersion::V54);
}
#[test]
fn number_model_split() {
assert_eq!(LuaVersion::V51.number_model(), NumberModel::FloatOnly);
assert_eq!(LuaVersion::V52.number_model(), NumberModel::FloatOnly);
assert_eq!(LuaVersion::V53.number_model(), NumberModel::Dual);
assert_eq!(LuaVersion::V54.number_model(), NumberModel::Dual);
assert_eq!(LuaVersion::V55.number_model(), NumberModel::Dual);
}
#[test]
fn version_str_and_byte() {
assert_eq!(LuaVersion::V54.version_str(), "Lua 5.4");
assert_eq!(LuaVersion::V54.luac_version_byte(), 0x54);
assert_eq!(LuaVersion::V53.version_str(), "Lua 5.3");
assert_eq!(LuaVersion::V53.luac_version_byte(), 0x53);
}
}