add support time.Duration on mapping (#1794)
This commit is contained in:
parent
f8f1459619
commit
805b2d4904
@ -1413,3 +1413,20 @@ func TestBindingUnknownTypeChan(t *testing.T) {
|
|||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
assert.Equal(t, errUnknownType, err)
|
assert.Equal(t, errUnknownType, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBindingTimeDuration(t *testing.T) {
|
||||||
|
var s struct {
|
||||||
|
Timeout time.Duration `form:"timeout"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ok
|
||||||
|
req := formPostRequest("", "timeout=5s")
|
||||||
|
err := Form.Bind(req, &s)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 5*time.Second, s.Timeout)
|
||||||
|
|
||||||
|
// error
|
||||||
|
req = formPostRequest("", "timeout=wrong")
|
||||||
|
err = Form.Bind(req, &s)
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
@ -141,6 +141,10 @@ func setWithProperType(val string, value reflect.Value, field reflect.StructFiel
|
|||||||
case reflect.Int32:
|
case reflect.Int32:
|
||||||
return setIntField(val, 32, value)
|
return setIntField(val, 32, value)
|
||||||
case reflect.Int64:
|
case reflect.Int64:
|
||||||
|
switch value.Interface().(type) {
|
||||||
|
case time.Duration:
|
||||||
|
return setTimeDuration(val, value, field)
|
||||||
|
}
|
||||||
return setIntField(val, 64, value)
|
return setIntField(val, 64, value)
|
||||||
case reflect.Uint:
|
case reflect.Uint:
|
||||||
return setUintField(val, 0, value)
|
return setUintField(val, 0, value)
|
||||||
@ -263,6 +267,15 @@ func setSlice(vals []string, value reflect.Value, field reflect.StructField) err
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setTimeDuration(val string, value reflect.Value, field reflect.StructField) error {
|
||||||
|
d, err := time.ParseDuration(val)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
value.Set(reflect.ValueOf(d))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func head(str, sep string) (head string, tail string) {
|
func head(str, sep string) (head string, tail string) {
|
||||||
idx := strings.Index(str, sep)
|
idx := strings.Index(str, sep)
|
||||||
if idx < 0 {
|
if idx < 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user