77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package plugins
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
lua "github.com/yuin/gopher-lua"
|
|
)
|
|
|
|
// registerAPI creates the global `verstak` table with all API modules.
|
|
func registerAPI(vm *LuaVM) {
|
|
L := vm.L
|
|
|
|
// Main verstak table
|
|
verstak := L.NewTable()
|
|
|
|
// Sub-modules
|
|
verstak.RawSetString("node", registerNodeAPI(vm))
|
|
verstak.RawSetString("worklog", registerWorklogAPI(vm))
|
|
verstak.RawSetString("db", registerDBAPI(vm))
|
|
verstak.RawSetString("ui", registerUIAPI(vm))
|
|
verstak.RawSetString("config", registerConfigAPI(vm))
|
|
verstak.RawSetString("state", registerStateAPI(vm))
|
|
verstak.RawSetString("activity", registerActivityAPI(vm))
|
|
verstak.RawSetString("schedule", registerScheduleAPI(vm))
|
|
verstak.RawSetString("http", registerHTTPAPI(vm))
|
|
verstak.RawSetString("file", registerFileAPI(vm))
|
|
|
|
// Register as global
|
|
L.SetGlobal("verstak", verstak)
|
|
}
|
|
|
|
// luaTableFromMap converts a Go map to a Lua table.
|
|
func luaTableFromMap(L *lua.LState, m map[string]interface{}) *lua.LTable {
|
|
tbl := L.NewTable()
|
|
for k, v := range m {
|
|
tbl.RawSetString(k, toLuaValue(L, v))
|
|
}
|
|
return tbl
|
|
}
|
|
|
|
// luaTableFromList converts a Go slice to a Lua array table.
|
|
func luaTableFromList(L *lua.LState, items []map[string]interface{}) *lua.LTable {
|
|
tbl := L.NewTable()
|
|
for i, item := range items {
|
|
tbl.RawSetInt(i+1, luaTableFromMap(L, item))
|
|
}
|
|
return tbl
|
|
}
|
|
|
|
// toLuaValue converts a Go value to a Lua value.
|
|
func toLuaValue(L *lua.LState, v interface{}) lua.LValue {
|
|
switch val := v.(type) {
|
|
case nil:
|
|
return lua.LNil
|
|
case string:
|
|
return lua.LString(val)
|
|
case int:
|
|
return lua.LNumber(val)
|
|
case int64:
|
|
return lua.LNumber(val)
|
|
case float64:
|
|
return lua.LNumber(val)
|
|
case bool:
|
|
return lua.LBool(val)
|
|
case []interface{}:
|
|
tbl := L.NewTable()
|
|
for i, item := range val {
|
|
tbl.RawSetInt(i+1, toLuaValue(L, item))
|
|
}
|
|
return tbl
|
|
case map[string]interface{}:
|
|
return luaTableFromMap(L, val)
|
|
default:
|
|
return lua.LString(fmt.Sprintf("%v", v))
|
|
}
|
|
}
|