mirror of
https://github.com/lune-org/lune.git
synced 2025-05-04 10:43:57 +01:00
Fix __tostring metamethods sometimes not being respected properly
This commit is contained in:
parent
4ce2d3a80f
commit
c163c6f157
1 changed files with 20 additions and 22 deletions
|
@ -1,37 +1,35 @@
|
||||||
use mlua::prelude::*;
|
use mlua::prelude::*;
|
||||||
|
|
||||||
pub fn get_table_type_metavalue(tab: &LuaTable) -> Option<String> {
|
pub fn get_table_type_metavalue(tab: &LuaTable) -> Option<String> {
|
||||||
let s = tab
|
let meta = tab.metatable()?;
|
||||||
.metatable()?
|
let s = meta.get::<LuaString>(LuaMetaMethod::Type.name()).ok()?;
|
||||||
.get::<LuaString>(LuaMetaMethod::Type.name())
|
|
||||||
.ok()?;
|
|
||||||
let s = s.to_str().ok()?;
|
let s = s.to_str().ok()?;
|
||||||
Some(s.to_string())
|
Some(s.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_userdata_type_metavalue(tab: &LuaAnyUserData) -> Option<String> {
|
pub fn get_userdata_type_metavalue(usr: &LuaAnyUserData) -> Option<String> {
|
||||||
let s = tab
|
let meta = usr.metatable().ok()?;
|
||||||
.metatable()
|
let s = meta.get::<LuaString>(LuaMetaMethod::Type.name()).ok()?;
|
||||||
.ok()?
|
|
||||||
.get::<LuaString>(LuaMetaMethod::Type.name())
|
|
||||||
.ok()?;
|
|
||||||
let s = s.to_str().ok()?;
|
let s = s.to_str().ok()?;
|
||||||
Some(s.to_string())
|
Some(s.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn call_table_tostring_metamethod(tab: &LuaTable) -> Option<String> {
|
pub fn call_table_tostring_metamethod(tab: &LuaTable) -> Option<String> {
|
||||||
tab.metatable()?
|
let meta = tab.metatable()?;
|
||||||
.get::<LuaFunction>(LuaMetaMethod::ToString.name())
|
let value = meta.get(LuaMetaMethod::ToString.name()).ok()?;
|
||||||
.ok()?
|
match value {
|
||||||
.call(tab)
|
LuaValue::String(s) => Some(s.to_string_lossy().to_string()),
|
||||||
.ok()
|
LuaValue::Function(f) => f.call(tab).ok(),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn call_userdata_tostring_metamethod(tab: &LuaAnyUserData) -> Option<String> {
|
pub fn call_userdata_tostring_metamethod(usr: &LuaAnyUserData) -> Option<String> {
|
||||||
tab.metatable()
|
let meta = usr.metatable().ok()?;
|
||||||
.ok()?
|
let value = meta.get(LuaMetaMethod::ToString.name()).ok()?;
|
||||||
.get::<LuaFunction>(LuaMetaMethod::ToString.name())
|
match value {
|
||||||
.ok()?
|
LuaValue::String(s) => Some(s.to_string_lossy().to_string()),
|
||||||
.call(tab)
|
LuaValue::Function(f) => f.call(usr).ok(),
|
||||||
.ok()
|
_ => None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue