treefmt/cli/mappers.go
Paul Meyer c07305e6b0 cli: remove global state, init function usage
Signed-off-by: Paul Meyer <49727155+katexochen@users.noreply.github.com>
2024-06-06 20:28:37 +02:00

38 lines
770 B
Go

package cli
import (
"fmt"
"reflect"
"github.com/alecthomas/kong"
"github.com/charmbracelet/log"
)
func NewOptions() []kong.Option {
return []kong.Option{
kong.TypeMapper(reflect.TypeOf(log.DebugLevel), logLevelDecoder()),
}
}
func logLevelDecoder() kong.MapperFunc {
return func(ctx *kong.DecodeContext, target reflect.Value) error {
t, err := ctx.Scan.PopValue("string")
if err != nil {
return err
}
var str string
switch v := t.Value.(type) {
case string:
str = v
default:
return fmt.Errorf("expected a string but got %q (%T)", t, t.Value)
}
level, err := log.ParseLevel(str)
if err != nil {
return fmt.Errorf("failed to parse '%v' as log level: %w", level, err)
}
target.Set(reflect.ValueOf(level))
return nil
}
}