mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-23 01:57:55 +08:00
Add support for pointers for time fields in form mapping
This commit is contained in:
parent
b869fe1415
commit
5257bd38d1
@ -69,19 +69,13 @@ func mapForm(ptr interface{}, form map[string][]string) error {
|
|||||||
sliceOf := structField.Type().Elem().Kind()
|
sliceOf := structField.Type().Elem().Kind()
|
||||||
slice := reflect.MakeSlice(structField.Type(), numElems, numElems)
|
slice := reflect.MakeSlice(structField.Type(), numElems, numElems)
|
||||||
for i := 0; i < numElems; i++ {
|
for i := 0; i < numElems; i++ {
|
||||||
if err := setWithProperType(sliceOf, inputValue[i], slice.Index(i)); err != nil {
|
if err := setWithProperType(sliceOf, inputValue[i], slice.Index(i), typeField); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val.Field(i).Set(slice)
|
val.Field(i).Set(slice)
|
||||||
} else {
|
} else {
|
||||||
if _, isTime := structField.Interface().(time.Time); isTime {
|
if err := setWithProperType(typeField.Type.Kind(), inputValue[0], structField, typeField); err != nil {
|
||||||
if err := setTimeField(inputValue[0], typeField, structField); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err := setWithProperType(typeField.Type.Kind(), inputValue[0], structField); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,7 +83,7 @@ func mapForm(ptr interface{}, form map[string][]string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setWithProperType(valueKind reflect.Kind, val string, structField reflect.Value) error {
|
func setWithProperType(valueKind reflect.Kind, val string, structField reflect.Value, typeField reflect.StructField) error {
|
||||||
switch valueKind {
|
switch valueKind {
|
||||||
case reflect.Int:
|
case reflect.Int:
|
||||||
return setIntField(val, 0, structField)
|
return setIntField(val, 0, structField)
|
||||||
@ -124,7 +118,12 @@ func setWithProperType(valueKind reflect.Kind, val string, structField reflect.V
|
|||||||
structField.Set(reflect.New(structField.Type().Elem()))
|
structField.Set(reflect.New(structField.Type().Elem()))
|
||||||
}
|
}
|
||||||
structFieldElem := structField.Elem()
|
structFieldElem := structField.Elem()
|
||||||
return setWithProperType(structFieldElem.Kind(), val, structFieldElem)
|
return setWithProperType(structFieldElem.Kind(), val, structFieldElem, typeField)
|
||||||
|
case reflect.Struct:
|
||||||
|
if _, isTime := structField.Interface().(time.Time); isTime {
|
||||||
|
return setTimeField(val, typeField, structField)
|
||||||
|
}
|
||||||
|
fallthrough
|
||||||
default:
|
default:
|
||||||
return errors.New("Unknown type")
|
return errors.New("Unknown type")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user