add support time.Duration on mapping (#1794)
This commit is contained in:
		@ -1413,3 +1413,20 @@ func TestBindingUnknownTypeChan(t *testing.T) {
 | 
			
		||||
	assert.Error(t, 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:
 | 
			
		||||
		return setIntField(val, 32, value)
 | 
			
		||||
	case reflect.Int64:
 | 
			
		||||
		switch value.Interface().(type) {
 | 
			
		||||
		case time.Duration:
 | 
			
		||||
			return setTimeDuration(val, value, field)
 | 
			
		||||
		}
 | 
			
		||||
		return setIntField(val, 64, value)
 | 
			
		||||
	case reflect.Uint:
 | 
			
		||||
		return setUintField(val, 0, value)
 | 
			
		||||
@ -263,6 +267,15 @@ func setSlice(vals []string, value reflect.Value, field reflect.StructField) err
 | 
			
		||||
	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) {
 | 
			
		||||
	idx := strings.Index(str, sep)
 | 
			
		||||
	if idx < 0 {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user