mirror of
https://github.com/gin-gonic/gin.git
synced 2026-07-24 22:55:45 +08:00
Compare commits
4 Commits
b9a1479d90
...
ced7894282
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ced7894282 | ||
|
|
e88fc8927a | ||
|
|
513a86e17f | ||
|
|
b4d09053db |
5
.github/workflows/trivy-scan.yml
vendored
5
.github/workflows/trivy-scan.yml
vendored
@ -8,9 +8,8 @@ on:
|
||||
branches:
|
||||
- master
|
||||
schedule:
|
||||
# Run every 3 months (quarterly) on the 1st day at 00:00 UTC
|
||||
# Months: January (1), April (4), July (7), October (10)
|
||||
- cron: '0 0 1 1,4,7,10 *'
|
||||
# Run daily at 00:00 UTC
|
||||
- cron: '0 0 * * *'
|
||||
workflow_dispatch: # Allow manual trigger
|
||||
|
||||
permissions:
|
||||
|
||||
@ -186,7 +186,10 @@ type BindUnmarshaler interface {
|
||||
func trySetCustom(val string, value reflect.Value) (isSet bool, err error) {
|
||||
switch v := value.Addr().Interface().(type) {
|
||||
case BindUnmarshaler:
|
||||
return true, v.UnmarshalParam(val)
|
||||
if err := v.UnmarshalParam(val); err != nil {
|
||||
return true, fmt.Errorf("invalid value %q: %w", val, err)
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
@ -245,7 +248,10 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
|
||||
}
|
||||
|
||||
if ok, err = trySetCustom(vs[0], value); ok {
|
||||
return ok, err
|
||||
if err != nil {
|
||||
return true, fmt.Errorf("field %q: %w", field.Name, err)
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
if vs, err = trySplit(vs, field); err != nil {
|
||||
@ -268,7 +274,10 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
|
||||
}
|
||||
|
||||
if ok, err = trySetCustom(vs[0], value); ok {
|
||||
return ok, err
|
||||
if err != nil {
|
||||
return true, fmt.Errorf("field %q: %w", field.Name, err)
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
if vs, err = trySplit(vs, field); err != nil {
|
||||
@ -293,7 +302,10 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
|
||||
}
|
||||
}
|
||||
if ok, err := trySetCustom(val, value); ok {
|
||||
return ok, err
|
||||
if err != nil {
|
||||
return true, fmt.Errorf("field %q: %w", field.Name, err)
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
return true, setWithProperType(val, value, field)
|
||||
}
|
||||
|
||||
@ -715,3 +715,22 @@ func TestMappingEmptyValues(t *testing.T) {
|
||||
assert.Equal(t, []int{1, 2, 3}, s.SliceCsv)
|
||||
})
|
||||
}
|
||||
|
||||
type testCustom struct {
|
||||
Value string
|
||||
}
|
||||
|
||||
func (t *testCustom) UnmarshalParam(param string) error {
|
||||
t.Value = "prefix_" + param
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestTrySetCustomIntegration(t *testing.T) {
|
||||
var s struct {
|
||||
F testCustom `form:"f"`
|
||||
}
|
||||
|
||||
err := mappingByPtr(&s, formSource{"f": {"hello"}}, "form")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "prefix_hello", s.F.Value)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user