mirror of
https://github.com/akyaiy/GoSally-mvp.git
synced 2026-01-03 19:52:25 +00:00
make ConvertGolangTypesToLua simplier
This commit is contained in:
@@ -2,6 +2,7 @@ package sv1
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
lua "github.com/yuin/gopher-lua"
|
lua "github.com/yuin/gopher-lua"
|
||||||
)
|
)
|
||||||
@@ -44,85 +45,44 @@ func ConvertLuaTypesToGolang(value lua.LValue) any {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ConvertGolangTypesToLua(L *lua.LState, val any) lua.LValue {
|
func ConvertGolangTypesToLua(L *lua.LState, val any) lua.LValue {
|
||||||
switch v := val.(type) {
|
if val == nil {
|
||||||
|
|
||||||
case nil:
|
|
||||||
return lua.LNil
|
return lua.LNil
|
||||||
|
}
|
||||||
|
|
||||||
case string:
|
rv := reflect.ValueOf(val)
|
||||||
return lua.LString(v)
|
rt := rv.Type()
|
||||||
case bool:
|
|
||||||
return lua.LBool(v)
|
|
||||||
case int:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case int8:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case int16:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case int32:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case int64:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case uint:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case uint8:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case uint16:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case uint32:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case uint64:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case float32:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
case float64:
|
|
||||||
return lua.LNumber(v)
|
|
||||||
|
|
||||||
case []string:
|
switch rt.Kind() {
|
||||||
|
case reflect.String:
|
||||||
|
return lua.LString(rv.String())
|
||||||
|
case reflect.Bool:
|
||||||
|
return lua.LBool(rv.Bool())
|
||||||
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
return lua.LNumber(rv.Int())
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||||
|
return lua.LNumber(rv.Uint())
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
return lua.LNumber(rv.Float())
|
||||||
|
|
||||||
|
case reflect.Slice, reflect.Array:
|
||||||
tbl := L.NewTable()
|
tbl := L.NewTable()
|
||||||
for i, s := range v {
|
for i := 0; i < rv.Len(); i++ {
|
||||||
tbl.RawSetInt(i+1, lua.LString(s))
|
tbl.RawSetInt(i+1, ConvertGolangTypesToLua(L, rv.Index(i).Interface()))
|
||||||
}
|
|
||||||
return tbl
|
|
||||||
case []int:
|
|
||||||
tbl := L.NewTable()
|
|
||||||
for i, n := range v {
|
|
||||||
tbl.RawSetInt(i+1, lua.LNumber(n))
|
|
||||||
}
|
|
||||||
return tbl
|
|
||||||
case []float64:
|
|
||||||
tbl := L.NewTable()
|
|
||||||
for i, f := range v {
|
|
||||||
tbl.RawSetInt(i+1, lua.LNumber(f))
|
|
||||||
}
|
|
||||||
return tbl
|
|
||||||
case []any:
|
|
||||||
tbl := L.NewTable()
|
|
||||||
for i, item := range v {
|
|
||||||
tbl.RawSetInt(i+1, ConvertGolangTypesToLua(L, item))
|
|
||||||
}
|
}
|
||||||
return tbl
|
return tbl
|
||||||
|
|
||||||
case map[string]string:
|
case reflect.Map:
|
||||||
|
if rt.Key().Kind() == reflect.String {
|
||||||
tbl := L.NewTable()
|
tbl := L.NewTable()
|
||||||
for k, s := range v {
|
for _, key := range rv.MapKeys() {
|
||||||
tbl.RawSetString(k, lua.LString(s))
|
val := rv.MapIndex(key)
|
||||||
|
tbl.RawSetString(key.String(), ConvertGolangTypesToLua(L, val.Interface()))
|
||||||
}
|
}
|
||||||
return tbl
|
return tbl
|
||||||
case map[string]int:
|
|
||||||
tbl := L.NewTable()
|
|
||||||
for k, n := range v {
|
|
||||||
tbl.RawSetString(k, lua.LNumber(n))
|
|
||||||
}
|
}
|
||||||
return tbl
|
|
||||||
case map[string]any:
|
|
||||||
tbl := L.NewTable()
|
|
||||||
for k, val := range v {
|
|
||||||
tbl.RawSetString(k, ConvertGolangTypesToLua(L, val))
|
|
||||||
}
|
|
||||||
return tbl
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return lua.LString(fmt.Sprintf("%v", v))
|
return lua.LString(fmt.Sprintf("%v", val))
|
||||||
}
|
}
|
||||||
|
return lua.LString(fmt.Sprintf("%v", val))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user