roblox_emulator: move coerce method onto CoerceEnum struct

This commit is contained in:
Quaternions 2025-04-23 17:19:59 -07:00
parent b5da30fd9a
commit 2bf34fd04c
Signed by: Quaternions
GPG Key ID: D0DF5964F79AC131
2 changed files with 11 additions and 9 deletions
lib/roblox_emulator/src/runner

@ -62,13 +62,6 @@ impl<'a> EnumItems<'a>{
None=>self.from_value(enum_item.value)
}
}
pub fn coerce(&self,e:CoerceEnum)->mlua::Result<EnumItem<'a>>{
match e{
CoerceEnum::Integer(int)=>self.from_value(int as u32),
CoerceEnum::String(s)=>self.from_name(&*s.to_str()?),
CoerceEnum::Enum(enum_item)=>self.from_enum(enum_item),
}.ok_or_else(||mlua::Error::runtime(format!("Bad {} EnumItem",self.ed.name)))
}
}
pub enum CoerceEnum<'a>{
@ -76,6 +69,15 @@ pub enum CoerceEnum<'a>{
String(mlua::String),
Enum(EnumItem<'a>),
}
impl CoerceEnum<'_>{
pub fn coerce_to<'a>(self,enum_items:EnumItems<'a>)->mlua::Result<EnumItem<'a>>{
match self{
CoerceEnum::Integer(int)=>enum_items.from_value(int as u32),
CoerceEnum::String(s)=>enum_items.from_name(&*s.to_str()?),
CoerceEnum::Enum(enum_item)=>enum_items.from_enum(enum_item),
}.ok_or_else(||mlua::Error::runtime(format!("Bad {} EnumItem",enum_items.ed.name)))
}
}
impl mlua::FromLua for CoerceEnum<'_>{
fn from_lua(value:mlua::Value,_lua:&mlua::Lua)->Result<Self,mlua::Error>{

@ -22,12 +22,12 @@ pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table)->Result<(),mlua::Error>{
easing_style:match easing_style{
// Enum.EasingStyle.Quad
None=>rbx_types::Enum::from_u32(3),
Some(e)=>Enums.get("EasingStyle").unwrap().coerce(e)?.into(),
Some(e)=>e.coerce_to(Enums.get("EasingStyle").unwrap())?.into(),
},
easing_direction:match easing_direction{
// Enum.EasingDirection.Out
None=>rbx_types::Enum::from_u32(1),
Some(e)=>Enums.get("EasingDirection").unwrap().coerce(e)?.into(),
Some(e)=>e.coerce_to(Enums.get("EasingDirection").unwrap())?.into(),
},
repeat_count:repeat_count.unwrap_or(0),
reverses:reverses.unwrap_or(false),