From 6758ee6a8a9df9da5eecc9be9e0458fa29438526 Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Tue, 12 Mar 2024 17:18:29 +0100 Subject: [PATCH] Patch conversion from lua table to go slice or map Former-commit-id: d94b879215374438a096e4b80a49b362266149ac --- pkg/obilua/lua_push_interface.go | 2 +- pkg/obilua/lua_table.go | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/pkg/obilua/lua_push_interface.go b/pkg/obilua/lua_push_interface.go index 809325d..4786191 100644 --- a/pkg/obilua/lua_push_interface.go +++ b/pkg/obilua/lua_push_interface.go @@ -64,7 +64,7 @@ func pushMapStringInterfaceToLua(L *lua.LState, m map[string]interface{}) { case string: luaTable.RawSetString(key, lua.LString(v)) default: - log.Fatalf("Doesn't deal with map containing value %v", v) + log.Fatalf("Doesn't deal with map containing value %v of type %T", v, v) } } diff --git a/pkg/obilua/lua_table.go b/pkg/obilua/lua_table.go index f3dd77e..1278377 100644 --- a/pkg/obilua/lua_table.go +++ b/pkg/obilua/lua_table.go @@ -14,7 +14,17 @@ func Table2Interface(interpreter *lua.LState, table *lua.LTable) interface{} { if isArray { val := make([]interface{}, table.Len()) for i := 1; i <= table.Len(); i++ { - val[i-1] = table.RawGetInt(i) + v := table.RawGetInt(i) + switch v.Type() { + case lua.LTNil: + val[i-1] = nil + case lua.LTBool: + val[i-1] = bool(v.(lua.LBool)) + case lua.LTNumber: + val[i-1] = float64(v.(lua.LNumber)) + case lua.LTString: + val[i-1] = string(v.(lua.LString)) + } } return val } else { @@ -22,7 +32,16 @@ func Table2Interface(interpreter *lua.LState, table *lua.LTable) interface{} { val := make(map[string]interface{}) table.ForEach(func(k, v lua.LValue) { if ks, ok := k.(lua.LString); ok { - val[string(ks)] = v + switch v.Type() { + case lua.LTNil: + val[string(ks)] = nil + case lua.LTBool: + val[string(ks)] = bool(v.(lua.LBool)) + case lua.LTNumber: + val[string(ks)] = float64(v.(lua.LNumber)) + case lua.LTString: + val[string(ks)] = string(v.(lua.LString)) + } } }) return val