ErrInvalidValue support for interface{} (#372)

This commit is contained in:
Matt Moore 2019-04-08 18:26:58 -07:00 committed by Knative Prow Robot
parent e0fcca3e1d
commit f55c11c3ce
2 changed files with 24 additions and 8 deletions

View File

@ -300,17 +300,17 @@ func ErrDisallowedFields(fieldPaths ...string) *FieldError {
}
}
// ErrInvalidArrayValue consturcts a FieldError for a repetetive `field`
// ErrInvalidArrayValue constructs a FieldError for a repetetive `field`
// at `index` that has received an invalid string value.
func ErrInvalidArrayValue(value, field string, index int) *FieldError {
func ErrInvalidArrayValue(value interface{}, field string, index int) *FieldError {
return ErrInvalidValue(value, CurrentField).ViaFieldIndex(field, index)
}
// ErrInvalidValue constructs a FieldError for a field that has received an
// invalid string value.
func ErrInvalidValue(value, fieldPath string) *FieldError {
func ErrInvalidValue(value interface{}, fieldPath string) *FieldError {
return &FieldError{
Message: fmt.Sprintf("invalid value %q", value),
Message: fmt.Sprintf("invalid value: %v", value),
Paths: []string{fieldPath},
}
}
@ -335,9 +335,9 @@ func ErrMultipleOneOf(fieldPaths ...string) *FieldError {
// ErrInvalidKeyName is a variadic helper method for constructing a FieldError
// that specifies a key name that is invalid.
func ErrInvalidKeyName(value, fieldPath string, details ...string) *FieldError {
func ErrInvalidKeyName(key, fieldPath string, details ...string) *FieldError {
return &FieldError{
Message: fmt.Sprintf("invalid key name %q", value),
Message: fmt.Sprintf("invalid key name %q", key),
Paths: []string{fieldPath},
Details: strings.Join(details, ", "),
}

View File

@ -106,7 +106,17 @@ Body.`,
name: "invalid value propagation",
err: ErrInvalidValue("foo", "bar"),
prefixes: [][]string{{"baz"}},
want: `invalid value "foo": baz.bar`,
want: `invalid value: foo: baz.bar`,
}, {
name: "invalid value propagation (int)",
err: ErrInvalidValue(5, "bar"),
prefixes: [][]string{{"baz"}},
want: `invalid value: 5: baz.bar`,
}, {
name: "invalid value propagation (duration)",
err: ErrInvalidValue(5*time.Second, "bar"),
prefixes: [][]string{{"baz"}},
want: `invalid value: 5s: baz.bar`,
}, {
name: "missing mutually exclusive fields",
err: ErrMissingOneOf("foo", "bar"),
@ -407,7 +417,13 @@ can not use @, do not try`,
err: func() *FieldError {
return ErrInvalidArrayValue("kapot", "indexed", 5)
}(),
want: `invalid value "kapot": indexed[5]`,
want: `invalid value: kapot: indexed[5]`,
}, {
name: "leaf field error with index (int)",
err: func() *FieldError {
return ErrInvalidArrayValue(42, "indexed", 5)
}(),
want: `invalid value: 42: indexed[5]`,
}, {
name: "nil propagation",
err: nil,