diff --git a/validate.go b/validate.go index 1294dc0b..336817c4 100644 --- a/validate.go +++ b/validate.go @@ -428,10 +428,18 @@ func Validate(r Registry, s *Schema, path *PathBuffer, mode ValidateMode, v any, case uint64: num = float64(v) default: - res.Add(path, v, validation.MsgExpectedNumber) + if s.Type == TypeInteger { + res.Add(path, v, validation.MsgExpectedInteger) + } else { + res.Add(path, v, validation.MsgExpectedNumber) + } return } + if s.Type == TypeInteger && num != math.Trunc(num) { + res.Add(path, v, validation.MsgExpectedInteger) + } + if s.Minimum != nil { if num < *s.Minimum { res.Add(path, v, s.msgMinimum) diff --git a/validate_test.go b/validate_test.go index 767d0cca..60b3c339 100644 --- a/validate_test.go +++ b/validate_test.go @@ -123,7 +123,13 @@ var validateTests = []struct { name: "expected number int", typ: reflect.TypeOf(0), input: "", - errs: []string{"expected number"}, + errs: []string{"expected integer"}, + }, + { + name: "expected number int from float64", + typ: reflect.TypeOf(0), + input: float64(1.5), + errs: []string{"expected integer"}, }, { name: "expected number float64", @@ -731,13 +737,13 @@ var validateTests = []struct { name: "expected map item", typ: reflect.TypeOf(map[any]int{}), input: map[string]any{"one": 1, "two": true}, - errs: []string{"expected number"}, + errs: []string{"expected integer"}, }, { name: "expected map any item", typ: reflect.TypeOf(map[any]int{}), input: map[any]any{"one": 1, "two": true}, - errs: []string{"expected number"}, + errs: []string{"expected integer"}, }, { name: "map minProps success", diff --git a/validation/messages.go b/validation/messages.go index ea1160d3..6cf2f7ea 100644 --- a/validation/messages.go +++ b/validation/messages.go @@ -23,6 +23,7 @@ var ( MsgExpectedPropertyNameInObject = "expected propertyName value to be present in object" MsgExpectedBoolean = "expected boolean" MsgExpectedNumber = "expected number" + MsgExpectedInteger = "expected integer" MsgExpectedString = "expected string" MsgExpectedBase64String = "expected string to be base64 encoded" MsgExpectedArray = "expected array"