roblox_emulator: refactor Enums

This commit is contained in:
2025-04-23 12:37:46 -07:00
parent f8ef17e3f5
commit 3a9fdebb4d

View File

@@ -1,5 +1,3 @@
use mlua::IntoLua;
#[derive(Clone,Copy)] #[derive(Clone,Copy)]
pub struct EnumItem<'a>{ pub struct EnumItem<'a>{
name:Option<&'a str>, name:Option<&'a str>,
@@ -37,12 +35,17 @@ impl PartialEq for EnumItem<'_>{
#[derive(Clone,Copy)] #[derive(Clone,Copy)]
pub struct Enums; pub struct Enums;
impl Enums{
pub fn get(&self,index:&str)->Option<EnumItems<'static>>{
let db=rbx_reflection_database::get();
db.enums.get(index).map(|ed|EnumItems{ed})
}
}
#[derive(Clone,Copy)] #[derive(Clone,Copy)]
pub struct EnumItems<'a>{ pub struct EnumItems<'a>{
ed:&'a rbx_reflection::EnumDescriptor<'a>, ed:&'a rbx_reflection::EnumDescriptor<'a>,
} }
pub fn set_globals(_lua:&mlua::Lua,globals:&mlua::Table)->Result<(),mlua::Error>{ pub fn set_globals(_lua:&mlua::Lua,globals:&mlua::Table)->Result<(),mlua::Error>{
globals.set("Enum",Enums) globals.set("Enum",Enums)
} }
@@ -66,12 +69,8 @@ impl mlua::UserData for Enums{
fn add_fields<F:mlua::UserDataFields<Self>>(_fields:&mut F){ fn add_fields<F:mlua::UserDataFields<Self>>(_fields:&mut F){
} }
fn add_methods<M:mlua::UserDataMethods<Self>>(methods:&mut M){ fn add_methods<M:mlua::UserDataMethods<Self>>(methods:&mut M){
methods.add_meta_function(mlua::MetaMethod::Index,|lua,(_,val):(Self,mlua::String)|{ methods.add_meta_function(mlua::MetaMethod::Index,|_,(enums,val):(Self,mlua::String)|{
let db=rbx_reflection_database::get(); Ok(enums.get(&*val.to_str()?))
match db.enums.get(&*val.to_str()?){
Some(ed)=>EnumItems{ed}.into_lua(lua),
None=>mlua::Value::Nil.into_lua(lua),
}
}); });
} }
} }