diff options
-rw-r--r-- | plugins.go | 12 | ||||
-rw-r--r-- | plugins_test.go | 15 |
2 files changed, 19 insertions, 8 deletions
@@ -27,16 +27,15 @@ func registerStrucAsLuaMetaTable[T any]( ), ) - var zero [0]T + var dummyType T + tableMethods := luaTableGenFactory(reflect.TypeOf(dummyType), checkStruct) luaState.SetField( metaTable, "__index", luaState.SetFuncs( luaState.NewTable(), - luaTableGenFactory(reflect.TypeOf(zero), - checkStruct, - ), + tableMethods, ), ) } @@ -55,6 +54,7 @@ func newStructFunctionFactory[T any](structType T, metaTableName string) func(*l func checkStruct[T any](luaState *lua.LState) *T { userData := luaState.CheckUserData(1) + if v, ok := userData.Value.(*T); ok { return v } @@ -143,8 +143,8 @@ func luaTableGenFactory[T any]( } func RegisterCustomLuaTypes(luaState *lua.LState) { - registerStrucAsLuaMetaTable(luaState, checkStruct, TomlConfig{}, "toml_config") - registerStrucAsLuaMetaTable(luaState, checkStruct, CustomCommand{}, "custom_command") + registerStrucAsLuaMetaTable[TomlConfig](luaState, checkStruct, TomlConfig{}, "toml_config") + registerStrucAsLuaMetaTable[CustomCommand](luaState, checkStruct, CustomCommand{}, "custom_command") } func returnAllPlugins(pluginPath string) ([]string, error) { diff --git a/plugins_test.go b/plugins_test.go index c6cd7ef..894ff3c 100644 --- a/plugins_test.go +++ b/plugins_test.go @@ -6,16 +6,27 @@ import ( lua "github.com/yuin/gopher-lua" ) -func MetaTableTest(t *testing.T) { +func TestMetaTable(t *testing.T) { luaState := lua.NewState() defer luaState.Close() RegisterCustomLuaTypes(luaState) if err := luaState.DoString(` + print("Testing MetaTable") + print(toml_config) + + for index, data in ipairs(toml_config) do + print(index, data) + for k,v in pairs(data) do + print("one") + print(k,v) + end + end + config = toml_config.new() print(config:IrcServer()) - config:TrcServer("irc.freenode.net") + config:IrcServer("irc.freenode.net") print(config:IrcServer()) `); err != nil { t.Fatal(err) |