route/vendor/github.com/otm/gluaflag/helpers.go

63 lines
1.2 KiB
Go

package gluaflag
import "github.com/yuin/gopher-lua"
func toStringSlice(t *lua.LTable) []string {
args := make([]string, 0, t.Len())
if zv := t.RawGet(lua.LNumber(0)); zv.Type() != lua.LTNil {
args = append(args, zv.String())
}
t.ForEach(func(k, v lua.LValue) {
if key, ok := k.(lua.LNumber); !ok || int(key) < 1 {
return
}
args = append(args, v.String())
})
return args
}
func toTable(L *lua.LState, s []string) *lua.LTable {
table := L.NewTable()
for _, str := range s {
table.Append(lua.LString(str))
}
return table
}
func forEachStrings(L *lua.LState, fn *lua.LFunction) []string {
p := lua.P{
Fn: fn,
NRet: -1,
Protect: true,
}
res := []string{}
for L.CallByParam(p) != nil {
switch L.GetTop() {
case 0:
break
case 1:
res = append(res, L.Get(-1).String())
L.Pop(1)
case 2:
res = append(res, L.Get(-2).String())
L.Pop(2)
default:
L.RaiseError("Iterator should return 1 or 2 arguments: got %v", L.GetTop())
}
}
return res
}
func checkFlagSet(L *lua.LState, i int) *FlagSet {
ud := L.CheckUserData(i)
if gf, ok := ud.Value.(*FlagSet); ok {
return gf
}
L.RaiseError("expected flagset userdata, got: `%T`", ud.Value)
return nil
}