From 0923f32b4664b65c6f3aca6ec492e703b14e13dc Mon Sep 17 00:00:00 2001 From: Alexey Date: Tue, 5 Aug 2025 22:10:15 +0300 Subject: [PATCH] make a get function on fetch params table fields --- internal/server/sv1/lua_handler.go | 40 +++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/internal/server/sv1/lua_handler.go b/internal/server/sv1/lua_handler.go index 7ac18c2..c4f03ee 100644 --- a/internal/server/sv1/lua_handler.go +++ b/internal/server/sv1/lua_handler.go @@ -53,11 +53,49 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest, sessionMod := lL.NewTable() inTable := lL.NewTable() paramsTable := lL.NewTable() + + fetchedParamsTable := lL.NewTable() if fetchedParams, ok := req.Params.(map[string]any); ok { for k, v := range fetchedParams { - lL.SetField(paramsTable, k, ConvertGolangTypesToLua(lL, v)) + lL.SetField(fetchedParamsTable, k, ConvertGolangTypesToLua(lL, v)) } } + + getter := lL.NewFunction(func(L *lua.LState) int { + path := L.OptString(1, "") + def := L.Get(2) + + get := func(tbl *lua.LTable, path string) lua.LValue { + if path == "" { + return tbl + } + current := tbl + parts := strings.Split(path, ".") + size := len(parts) + for index, key := range parts { + val := current.RawGetString(key) + if tblVal, ok := val.(*lua.LTable); ok { + current = tblVal + } else { + if index == size - 1 { + return val + } + return lua.LNil + } + } + return lua.LNil + } + + val := get(fetchedParamsTable, path) + if val == lua.LNil && def != lua.LNil { + L.Push(def) + } else { + L.Push(val) + } + return 1 + }) + + lL.SetField(paramsTable, "get", getter) lL.SetField(inTable, "params", paramsTable) outTable := lL.NewTable()