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. // 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) return ErrInvalidValue(value, CurrentField).ViaFieldIndex(field, index)
} }
// ErrInvalidValue constructs a FieldError for a field that has received an // ErrInvalidValue constructs a FieldError for a field that has received an
// invalid string value. // invalid string value.
func ErrInvalidValue(value, fieldPath string) *FieldError { func ErrInvalidValue(value interface{}, fieldPath string) *FieldError {
return &FieldError{ return &FieldError{
Message: fmt.Sprintf("invalid value %q", value), Message: fmt.Sprintf("invalid value: %v", value),
Paths: []string{fieldPath}, Paths: []string{fieldPath},
} }
} }
@ -335,9 +335,9 @@ func ErrMultipleOneOf(fieldPaths ...string) *FieldError {
// ErrInvalidKeyName is a variadic helper method for constructing a FieldError // ErrInvalidKeyName is a variadic helper method for constructing a FieldError
// that specifies a key name that is invalid. // 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{ return &FieldError{
Message: fmt.Sprintf("invalid key name %q", value), Message: fmt.Sprintf("invalid key name %q", key),
Paths: []string{fieldPath}, Paths: []string{fieldPath},
Details: strings.Join(details, ", "), Details: strings.Join(details, ", "),
} }

View File

@ -106,7 +106,17 @@ Body.`,
name: "invalid value propagation", name: "invalid value propagation",
err: ErrInvalidValue("foo", "bar"), err: ErrInvalidValue("foo", "bar"),
prefixes: [][]string{{"baz"}}, 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", name: "missing mutually exclusive fields",
err: ErrMissingOneOf("foo", "bar"), err: ErrMissingOneOf("foo", "bar"),
@ -407,7 +417,13 @@ can not use @, do not try`,
err: func() *FieldError { err: func() *FieldError {
return ErrInvalidArrayValue("kapot", "indexed", 5) 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", name: "nil propagation",
err: nil, err: nil,