Добавлена обработка аргументов командной строки типа time.Duration
All checks were successful
test / test (push) Successful in 57s
All checks were successful
test / test (push) Successful in 57s
This commit is contained in:
parent
e06195bc14
commit
207759e9e4
10
cli.go
10
cli.go
@ -21,6 +21,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -247,6 +248,15 @@ func (c *Command) addFlag(value reflect.Value, field reflect.StructField) error
|
|||||||
|
|
||||||
usage, _ := field.Tag.Lookup("usage")
|
usage, _ := field.Tag.Lookup("usage")
|
||||||
|
|
||||||
|
if value.Type().PkgPath() == "time" && value.Type().Name() == "Duration" {
|
||||||
|
c.FlagSet.DurationVar(
|
||||||
|
(*time.Duration)(unsafe.Pointer(value.UnsafeAddr())),
|
||||||
|
name, time.Duration(0), usage,
|
||||||
|
)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
kind := value.Kind()
|
kind := value.Kind()
|
||||||
switch kind {
|
switch kind {
|
||||||
case reflect.Bool:
|
case reflect.Bool:
|
||||||
|
14
cli_test.go
14
cli_test.go
@ -20,6 +20,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.mousesoft.ru/ms/config/test"
|
"git.mousesoft.ru/ms/config/test"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@ -264,3 +265,16 @@ func TestCommandWithSlices(t *testing.T) {
|
|||||||
assert.Equal(200, conf.Values[1])
|
assert.Equal(200, conf.Values[1])
|
||||||
assert.Equal(300, conf.Values[2])
|
assert.Equal(300, conf.Values[2])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDuration(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
var conf struct {
|
||||||
|
interval time.Duration `cli:"interval" usage:"interval"`
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := NewCLI("Config")
|
||||||
|
assert.NoError(cmd.Init(&conf), "init config command")
|
||||||
|
|
||||||
|
args := []string{"--interval", "5s"}
|
||||||
|
assert.NoError(cmd.Parse(args))
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user