move lua types converters from utils to sv1

This commit is contained in:
2025-07-30 14:11:57 +03:00
parent ab37ecb7f7
commit dd336a7d9a
2 changed files with 17 additions and 103 deletions

View File

@@ -1,78 +0,0 @@
package utils
import (
"fmt"
lua "github.com/yuin/gopher-lua"
)
func ConvertLuaTypesToGolang(value lua.LValue) any {
switch value.Type() {
case lua.LTString:
return value.String()
case lua.LTNumber:
return float64(value.(lua.LNumber))
case lua.LTBool:
return bool(value.(lua.LBool))
case lua.LTTable:
tbl := value.(*lua.LTable)
// Попробуем как массив
var arr []any
isArray := true
tbl.ForEach(func(key, val lua.LValue) {
if key.Type() != lua.LTNumber {
isArray = false
}
arr = append(arr, ConvertLuaTypesToGolang(val))
})
if isArray {
return arr
}
result := make(map[string]any)
tbl.ForEach(func(key, val lua.LValue) {
result[key.String()] = ConvertLuaTypesToGolang(val)
})
return result
case lua.LTNil:
return nil
default:
return value.String()
}
}
func ConvertGolangTypesToLua(L *lua.LState, val any) lua.LValue {
switch v := val.(type) {
case string:
return lua.LString(v)
case bool:
return lua.LBool(v)
case int:
return lua.LNumber(float64(v))
case int64:
return lua.LNumber(float64(v))
case float32:
return lua.LNumber(float64(v))
case float64:
return lua.LNumber(v)
case []any:
tbl := L.NewTable()
for i, item := range v {
tbl.RawSetInt(i+1, ConvertGolangTypesToLua(L, item))
}
return tbl
case map[string]any:
tbl := L.NewTable()
for key, value := range v {
tbl.RawSetString(key, ConvertGolangTypesToLua(L, value))
}
return tbl
case nil:
return lua.LNil
default:
return lua.LString(fmt.Sprintf("%v", v))
}
}

View File

@@ -7,12 +7,13 @@ import (
"path/filepath" "path/filepath"
"strconv" "strconv"
"github.com/akyaiy/GoSally-mvp/internal/core/utils"
"github.com/akyaiy/GoSally-mvp/internal/engine/logs" "github.com/akyaiy/GoSally-mvp/internal/engine/logs"
"github.com/akyaiy/GoSally-mvp/internal/server/rpc" "github.com/akyaiy/GoSally-mvp/internal/server/rpc"
lua "github.com/yuin/gopher-lua" lua "github.com/yuin/gopher-lua"
) )
func (h *HandlerV1) handleLUA(path string, req *rpc.RPCRequest) *rpc.RPCResponse { func (h *HandlerV1) handleLUA(path string, req *rpc.RPCRequest) *rpc.RPCResponse {
L := lua.NewState() L := lua.NewState()
defer L.Close() defer L.Close()
@@ -21,7 +22,7 @@ func (h *HandlerV1) handleLUA(path string, req *rpc.RPCRequest) *rpc.RPCResponse
paramsTable := L.NewTable() paramsTable := L.NewTable()
if fetchedParams, ok := req.Params.(map[string]any); ok { if fetchedParams, ok := req.Params.(map[string]any); ok {
for k, v := range fetchedParams { for k, v := range fetchedParams {
L.SetField(paramsTable, k, utils.ConvertGolangTypesToLua(L, v)) L.SetField(paramsTable, k, ConvertGolangTypesToLua(L, v))
} }
} }
L.SetField(inTable, "Params", paramsTable) L.SetField(inTable, "Params", paramsTable)
@@ -34,29 +35,20 @@ func (h *HandlerV1) handleLUA(path string, req *rpc.RPCRequest) *rpc.RPCResponse
logTable := L.NewTable() logTable := L.NewTable()
L.SetField(logTable, "Info", L.NewFunction(func(L *lua.LState) int { logFuncs := map[string]func(string, ...any){
msg := L.ToString(1) "Info": h.x.SLog.Info,
h.x.SLog.Info(fmt.Sprintf("the script says: %s", msg), slog.String("script", path)) "Debug": h.x.SLog.Debug,
return 0 "Error": h.x.SLog.Error,
})) "Warn": h.x.SLog.Warn,
}
L.SetField(logTable, "Debug", L.NewFunction(func(L *lua.LState) int { for name, logFunc := range logFuncs {
msg := L.ToString(1) L.SetField(logTable, name, L.NewFunction(func(L *lua.LState) int {
h.x.SLog.Debug(fmt.Sprintf("the script says: %s", msg), slog.String("script", path)) msg := L.ToString(1)
return 0 logFunc(fmt.Sprintf("the script says: %s", msg), slog.String("script", path))
})) return 0
}))
L.SetField(logTable, "Error", L.NewFunction(func(L *lua.LState) int { }
msg := L.ToString(1)
h.x.SLog.Error(fmt.Sprintf("the script says: %s", msg), slog.String("script", path))
return 0
}))
L.SetField(logTable, "Warn", L.NewFunction(func(L *lua.LState) int {
msg := L.ToString(1)
h.x.SLog.Warn(fmt.Sprintf("the script says: %s", msg), slog.String("script", path))
return 0
}))
L.SetField(logTable, "Event", L.NewFunction(func(L *lua.LState) int { L.SetField(logTable, "Event", L.NewFunction(func(L *lua.LState) int {
msg := L.ToString(1) msg := L.ToString(1)
@@ -120,7 +112,7 @@ func (h *HandlerV1) handleLUA(path string, req *rpc.RPCRequest) *rpc.RPCResponse
out := make(map[string]any) out := make(map[string]any)
resultTbl.ForEach(func(key lua.LValue, value lua.LValue) { resultTbl.ForEach(func(key lua.LValue, value lua.LValue) {
out[key.String()] = utils.ConvertLuaTypesToGolang(value) out[key.String()] = ConvertLuaTypesToGolang(value)
}) })
out["responsible-node"] = h.cs.UUID32 out["responsible-node"] = h.cs.UUID32