Fix __tostring metamethods sometimes not being respected properly

This commit is contained in:
Filip Tibell 2025-04-24 21:31:03 +02:00
parent 4ce2d3a80f
commit c163c6f157
No known key found for this signature in database

View file

@ -1,37 +1,35 @@
use mlua::prelude::*;
pub fn get_table_type_metavalue(tab: &LuaTable) -> Option<String> {
let s = tab
.metatable()?
.get::<LuaString>(LuaMetaMethod::Type.name())
.ok()?;
let meta = tab.metatable()?;
let s = meta.get::<LuaString>(LuaMetaMethod::Type.name()).ok()?;
let s = s.to_str().ok()?;
Some(s.to_string())
}
pub fn get_userdata_type_metavalue(tab: &LuaAnyUserData) -> Option<String> {
let s = tab
.metatable()
.ok()?
.get::<LuaString>(LuaMetaMethod::Type.name())
.ok()?;
pub fn get_userdata_type_metavalue(usr: &LuaAnyUserData) -> Option<String> {
let meta = usr.metatable().ok()?;
let s = meta.get::<LuaString>(LuaMetaMethod::Type.name()).ok()?;
let s = s.to_str().ok()?;
Some(s.to_string())
}
pub fn call_table_tostring_metamethod(tab: &LuaTable) -> Option<String> {
tab.metatable()?
.get::<LuaFunction>(LuaMetaMethod::ToString.name())
.ok()?
.call(tab)
.ok()
let meta = tab.metatable()?;
let value = meta.get(LuaMetaMethod::ToString.name()).ok()?;
match value {
LuaValue::String(s) => Some(s.to_string_lossy().to_string()),
LuaValue::Function(f) => f.call(tab).ok(),
_ => None,
}
}
pub fn call_userdata_tostring_metamethod(tab: &LuaAnyUserData) -> Option<String> {
tab.metatable()
.ok()?
.get::<LuaFunction>(LuaMetaMethod::ToString.name())
.ok()?
.call(tab)
.ok()
pub fn call_userdata_tostring_metamethod(usr: &LuaAnyUserData) -> Option<String> {
let meta = usr.metatable().ok()?;
let value = meta.get(LuaMetaMethod::ToString.name()).ok()?;
match value {
LuaValue::String(s) => Some(s.to_string_lossy().to_string()),
LuaValue::Function(f) => f.call(usr).ok(),
_ => None,
}
}