91 lines
1.3 KiB
Go
91 lines
1.3 KiB
Go
package param
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
cerr "gitoa.ru/go-4devs/console/errors"
|
|
)
|
|
|
|
type key uint8
|
|
|
|
const (
|
|
paramHidden key = iota + 1
|
|
paramDescription
|
|
paramVerssion
|
|
paramHelp
|
|
)
|
|
|
|
const (
|
|
defaultVersion = "undefined"
|
|
)
|
|
|
|
func IsHidden(in Params) bool {
|
|
data, ok := Bool(in, paramHidden)
|
|
|
|
return ok && data
|
|
}
|
|
|
|
func Hidden(in Params) Params {
|
|
return in.With(paramHidden, true)
|
|
}
|
|
|
|
func Description(in Params) string {
|
|
data, _ := String(in, paramDescription)
|
|
|
|
return data
|
|
}
|
|
|
|
func WithDescription(desc string) Option {
|
|
return func(p Params) Params {
|
|
return p.With(paramDescription, desc)
|
|
}
|
|
}
|
|
|
|
func Version(in Params) string {
|
|
if data, ok := String(in, paramVerssion); ok {
|
|
return data
|
|
}
|
|
|
|
return defaultVersion
|
|
}
|
|
|
|
func WithVersion(in string) Option {
|
|
return func(p Params) Params {
|
|
return p.With(paramVerssion, in)
|
|
}
|
|
}
|
|
|
|
func HelpData(bin, name string) HData {
|
|
return HData{
|
|
Bin: bin,
|
|
Name: name,
|
|
}
|
|
}
|
|
|
|
type HData struct {
|
|
Bin string
|
|
Name string
|
|
}
|
|
|
|
type HelpFn func(data HData) (string, error)
|
|
|
|
func WithHelp(fn HelpFn) Option {
|
|
return func(p Params) Params {
|
|
return p.With(paramHelp, fn)
|
|
}
|
|
}
|
|
|
|
func Help(in Params, data HData) (string, error) {
|
|
fn, ok := in.Param(paramHelp)
|
|
if !ok {
|
|
return "", nil
|
|
}
|
|
|
|
hfn, fok := fn.(HelpFn)
|
|
if !fok {
|
|
return "", fmt.Errorf("%w: expect:%T, got:%T", cerr.ErrWrongType, (HelpFn)(nil), fn)
|
|
}
|
|
|
|
return hfn(data)
|
|
}
|