126 lines
2.2 KiB
Go
126 lines
2.2 KiB
Go
package option
|
|
|
|
import (
|
|
"gitoa.ru/go-4devs/config/param"
|
|
)
|
|
|
|
type key int
|
|
|
|
const (
|
|
paramHidden key = iota + 1
|
|
paramDefault
|
|
paramDesc
|
|
paramRequired
|
|
paramSlice
|
|
paramBool
|
|
paramPos
|
|
paramShort
|
|
)
|
|
|
|
func Short(in rune) param.Option {
|
|
return func(v param.Params) param.Params {
|
|
return param.With(v, paramShort, string(in))
|
|
}
|
|
}
|
|
|
|
func ParamShort(fn param.Params) (string, bool) {
|
|
data, ok := param.String(fn, paramShort)
|
|
|
|
return data, ok
|
|
}
|
|
|
|
func HasShort(short string) param.Has {
|
|
return func(fn param.Params) bool {
|
|
data, ok := param.String(fn, paramShort)
|
|
|
|
return ok && data == short
|
|
}
|
|
}
|
|
|
|
func WithType(in any) param.Option {
|
|
return func(v param.Params) param.Params {
|
|
out := param.WithType(in)(v)
|
|
if _, ok := in.(bool); ok {
|
|
return param.With(out, paramBool, ok)
|
|
}
|
|
|
|
return out
|
|
}
|
|
}
|
|
|
|
func Position(pos uint64) param.Option {
|
|
return func(p param.Params) param.Params {
|
|
return param.With(p, paramPos, pos)
|
|
}
|
|
}
|
|
|
|
func Hidden(v param.Params) param.Params {
|
|
return param.With(v, paramHidden, true)
|
|
}
|
|
|
|
func Required(v param.Params) param.Params {
|
|
return param.With(v, paramRequired, true)
|
|
}
|
|
|
|
func Slice(v param.Params) param.Params {
|
|
return param.With(v, paramSlice, true)
|
|
}
|
|
|
|
func Default(in any) param.Option {
|
|
return func(v param.Params) param.Params {
|
|
return param.With(v, paramDefault, in)
|
|
}
|
|
}
|
|
|
|
func Description(in string) param.Option {
|
|
return func(v param.Params) param.Params {
|
|
return param.With(v, paramDesc, in)
|
|
}
|
|
}
|
|
|
|
func HasDefaut(fn param.Params) bool {
|
|
_, ok := fn.Param(paramDefault)
|
|
|
|
return ok
|
|
}
|
|
|
|
func DataPosition(fn param.Params) (uint64, bool) {
|
|
return param.Uint64(paramPos, fn)
|
|
}
|
|
|
|
func DataDefaut(fn param.Params) (any, bool) {
|
|
data, ok := fn.Param(paramDefault)
|
|
|
|
return data, ok
|
|
}
|
|
|
|
func IsSlice(fn param.Params) bool {
|
|
data, ok := param.Bool(paramSlice, fn)
|
|
|
|
return ok && data
|
|
}
|
|
|
|
func IsBool(fn param.Params) bool {
|
|
data, ok := param.Bool(paramBool, fn)
|
|
|
|
return ok && data
|
|
}
|
|
|
|
func IsHidden(fn param.Params) bool {
|
|
data, ok := param.Bool(paramHidden, fn)
|
|
|
|
return ok && data
|
|
}
|
|
|
|
func IsRequired(fn param.Params) bool {
|
|
data, ok := param.Bool(paramRequired, fn)
|
|
|
|
return ok && data
|
|
}
|
|
|
|
func DataDescription(fn param.Params) string {
|
|
data, _ := param.String(fn, paramDesc)
|
|
|
|
return data
|
|
}
|