[ {
"decoder" : "string",
"input" : "a",
"ok" : "a"
}, {
"decoder" : "string",
"input" : null,
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string",
"input" : 1,
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected string",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "string"
},
"path" : ""
} ]
}, {
"decoder" : "string",
"input" : [ 1 ],
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected string",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "array",
"expected" : "string"
},
"path" : ""
} ]
}, {
"decoder" : "string_normalized_email",
"input" : " Ken@Example.COM ",
"ok" : "ken@example.com"
}, {
"decoder" : "string_normalized_email",
"input" : "ken@example",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid email",
"message_key" : "invalid_format.email",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_non_blank",
"input" : " ",
"issues" : [ {
"code" : "blank",
"message" : "must not be blank",
"message_key" : "blank",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_non_blank",
"input" : "",
"issues" : [ {
"code" : "blank",
"message" : "must not be blank",
"message_key" : "blank",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_min_3",
"input" : "日本",
"issues" : [ {
"code" : "too_short",
"message" : "must be at least 3 characters",
"message_key" : "too_short",
"meta" : {
"actual" : 2,
"min" : 3
},
"path" : ""
} ]
}, {
"decoder" : "string_min_3",
"input" : "日本語",
"ok" : "日本語"
}, {
"decoder" : "string_max_3",
"input" : "abcd",
"issues" : [ {
"code" : "too_long",
"message" : "must be at most 3 characters",
"message_key" : "too_long",
"meta" : {
"actual" : 4,
"max" : 3
},
"path" : ""
} ]
}, {
"decoder" : "string_length_4",
"input" : "abc",
"issues" : [ {
"code" : "invalid_length",
"message" : "must be exactly 4 characters",
"message_key" : "invalid_length",
"meta" : {
"actual" : 3,
"expected" : 4
},
"path" : ""
} ]
}, {
"decoder" : "string_one_of",
"input" : "c",
"issues" : [ {
"code" : "not_allowed",
"message" : "must be one of [a, b]",
"message_key" : "not_allowed",
"meta" : {
"actual" : "c",
"allowed" : [ "a", "b" ]
},
"path" : ""
} ]
}, {
"decoder" : "string_one_of",
"input" : "a",
"ok" : "a"
}, {
"decoder" : "string_starts_with",
"input" : "xab",
"issues" : [ {
"code" : "invalid_format",
"message" : "must start with \"ab\"",
"message_key" : "invalid_format.starts_with",
"meta" : {
"prefix" : "ab"
},
"path" : ""
} ]
}, {
"decoder" : "string_ends_with",
"input" : "abx",
"issues" : [ {
"code" : "invalid_format",
"message" : "must end with \"ab\"",
"message_key" : "invalid_format.ends_with",
"meta" : {
"suffix" : "ab"
},
"path" : ""
} ]
}, {
"decoder" : "string_contains",
"input" : "zzz",
"issues" : [ {
"code" : "invalid_format",
"message" : "must include \"ab\"",
"message_key" : "invalid_format.includes",
"meta" : {
"substring" : "ab"
},
"path" : ""
} ]
}, {
"decoder" : "string_ipv4",
"input" : "192.168.0.1",
"ok" : "192.168.0.1"
}, {
"decoder" : "string_ipv4",
"input" : "192.168.00.1",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IPv4 address",
"message_key" : "invalid_format.ipv4",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ipv6",
"input" : "[2001:db8::1]",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IPv6 address",
"message_key" : "invalid_format.ipv6",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ipv6",
"input" : "2001:db8::g",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IPv6 address",
"message_key" : "invalid_format.ipv6",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ip",
"input" : "::1",
"ok" : "::1"
}, {
"decoder" : "string_ip",
"input" : "localhost",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IP address",
"message_key" : "invalid_format.ip",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ulid",
"input" : "01ARZ3NDEKTSV4RRFFQ69G5FAV",
"ok" : "01ARZ3NDEKTSV4RRFFQ69G5FAV"
}, {
"decoder" : "string_ulid",
"input" : "01ARZ3NDEKTSV4RRFFQ69G5FAI",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid ULID",
"message_key" : "invalid_format.ulid",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_cuid",
"input" : "cjld2cjxh0000qzrmn831i7rn",
"ok" : "cjld2cjxh0000qzrmn831i7rn"
}, {
"decoder" : "string_cuid",
"input" : "xjld2cjxh0000qzrmn831i7rn",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid CUID",
"message_key" : "invalid_format.cuid",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_pattern",
"input" : "abc1",
"ok" : "abc1"
}, {
"decoder" : "string_pattern",
"input" : "abc1x",
"issues" : [ {
"code" : "invalid_format",
"message" : "invalid format",
"message_key" : "invalid_format",
"meta" : {
"pattern" : "[a-z]+\\d"
},
"path" : ""
} ]
}, {
"decoder" : "string_uuid",
"input" : "123e4567-e89b-12d3-a456-426614174000",
"ok" : "123e4567-e89b-12d3-a456-426614174000"
}, {
"decoder" : "string_uuid",
"input" : "not-a-uuid",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid UUID",
"message_key" : "invalid_format.uuid",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_url",
"input" : "https://example.com/a?b=c",
"ok" : "https://example.com/a?b=c"
}, {
"decoder" : "string_url",
"input" : "ftp://example.com",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid URL",
"message_key" : "invalid_format.url",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_url",
"input" : "https://",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid URL",
"message_key" : "invalid_format.url",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "int",
"input" : 42,
"ok" : 42
}, {
"decoder" : "int",
"input" : null,
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "int",
"input" : "42",
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : ""
} ]
}, {
"decoder" : "int",
"input" : 1.5,
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "integer"
},
"path" : ""
} ]
}, {
"decoder" : "int",
"input" : true,
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "boolean",
"expected" : "integer"
},
"path" : ""
} ]
}, {
"decoder" : "int_min_1",
"input" : 0,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be at least 1",
"message_key" : "out_of_range.minimum",
"meta" : {
"actual" : 0,
"min" : 1
},
"path" : ""
} ]
}, {
"decoder" : "int_max_10",
"input" : 11,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be at most 10",
"message_key" : "out_of_range.maximum",
"meta" : {
"actual" : 11,
"max" : 10
},
"path" : ""
} ]
}, {
"decoder" : "int_range",
"input" : 200,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be between 0 and 150",
"message_key" : "out_of_range.range",
"meta" : {
"actual" : 200,
"max" : 150,
"min" : 0
},
"path" : ""
} ]
}, {
"decoder" : "int_range",
"input" : -1,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be between 0 and 150",
"message_key" : "out_of_range.range",
"meta" : {
"actual" : -1,
"max" : 150,
"min" : 0
},
"path" : ""
} ]
}, {
"decoder" : "int_range",
"input" : 150,
"ok" : 150
}, {
"decoder" : "int_positive",
"input" : 0,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be positive",
"message_key" : "out_of_range.positive",
"meta" : {
"actual" : 0,
"min" : 1
},
"path" : ""
} ]
}, {
"decoder" : "int_negative",
"input" : 0,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be negative",
"message_key" : "out_of_range.negative",
"meta" : {
"actual" : 0,
"max" : -1
},
"path" : ""
} ]
}, {
"decoder" : "int_non_negative",
"input" : -1,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be non-negative",
"message_key" : "out_of_range.non_negative",
"meta" : {
"actual" : -1,
"min" : 0
},
"path" : ""
} ]
}, {
"decoder" : "int_non_positive",
"input" : 1,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be non-positive",
"message_key" : "out_of_range.non_positive",
"meta" : {
"actual" : 1,
"max" : 0
},
"path" : ""
} ]
}, {
"decoder" : "int_multiple_of_3",
"input" : 4,
"issues" : [ {
"code" : "not_multiple_of",
"message" : "must be a multiple of 3",
"message_key" : "not_multiple_of",
"meta" : {
"actual" : 4,
"divisor" : 3
},
"path" : ""
} ]
}, {
"decoder" : "int_one_of",
"input" : 2,
"issues" : [ {
"code" : "not_allowed",
"message" : "must be one of [1, 3]",
"message_key" : "not_allowed",
"meta" : {
"actual" : 2,
"allowed" : [ 1, 3 ]
},
"path" : ""
} ]
}, {
"decoder" : "long",
"input" : 9007199254740993,
"ok" : 9007199254740993
}, {
"decoder" : "long",
"input" : "1",
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected long",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "long"
},
"path" : ""
} ]
}, {
"decoder" : "long",
"input" : 1.0,
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected long",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "long"
},
"path" : ""
} ]
}, {
"decoder" : "double",
"input" : 1.25,
"ok" : 1.25
}, {
"decoder" : "double",
"input" : 2,
"ok" : 2.0
}, {
"decoder" : "double",
"input" : "1.0",
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected double",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "double"
},
"path" : ""
} ]
}, {
"decoder" : "double_positive",
"input" : 0,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be positive",
"message_key" : "out_of_range.positive",
"meta" : {
"actual" : 0.0,
"min" : 0.0
},
"path" : ""
} ]
}, {
"decoder" : "double_negative",
"input" : 0.5,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be negative",
"message_key" : "out_of_range.negative",
"meta" : {
"actual" : 0.5,
"max" : 0.0
},
"path" : ""
} ]
}, {
"decoder" : "double_range",
"input" : 2.0,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be between 0.5 and 1.5",
"message_key" : "out_of_range.range",
"meta" : {
"actual" : 2.0,
"max" : 1.5,
"min" : 0.5
},
"path" : ""
} ]
}, {
"decoder" : "double_min",
"input" : 0.25,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be at least 0.5",
"message_key" : "out_of_range.minimum",
"meta" : {
"actual" : 0.25,
"min" : 0.5
},
"path" : ""
} ]
}, {
"decoder" : "double_one_of",
"input" : 3.0,
"issues" : [ {
"code" : "not_allowed",
"message" : "must be one of [1.0, 2.0]",
"message_key" : "not_allowed",
"meta" : {
"actual" : 3.0,
"allowed" : [ 1.0, 2.0 ]
},
"path" : ""
} ]
}, {
"decoder" : "decimal",
"input" : 12.5,
"ok" : 12.5
}, {
"decoder" : "decimal",
"input" : "12.5",
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected number",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "number"
},
"path" : ""
} ]
}, {
"decoder" : "decimal_scale_2",
"input" : 1.125,
"issues" : [ {
"code" : "invalid_scale",
"message" : "too many decimal places (max 2)",
"message_key" : "invalid_scale",
"meta" : {
"actualScale" : 3,
"maxScale" : 2
},
"path" : ""
} ]
}, {
"decoder" : "decimal_positive",
"input" : 0,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be positive",
"message_key" : "out_of_range.positive",
"meta" : {
"actual" : 0,
"min" : 0
},
"path" : ""
} ]
}, {
"decoder" : "decimal_range",
"input" : 10.5,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be between 0 and 10",
"message_key" : "out_of_range.range",
"meta" : {
"actual" : 10.5,
"max" : 10,
"min" : 0
},
"path" : ""
} ]
}, {
"decoder" : "bool",
"input" : true,
"ok" : true
}, {
"decoder" : "bool",
"input" : "true",
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected boolean",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "boolean"
},
"path" : ""
} ]
}, {
"decoder" : "bool",
"input" : null,
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "bool_is_true",
"input" : false,
"issues" : [ {
"code" : "invalid_value",
"message" : "must be true",
"message_key" : "invalid_value",
"meta" : {
"actual" : false,
"expected" : true
},
"path" : ""
} ]
}, {
"decoder" : "list_int",
"input" : [ 1, 2, 3 ],
"ok" : [ 1, 2, 3 ]
}, {
"decoder" : "list_int",
"input" : [ 1, "a", 3, null ],
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/1"
}, {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/3"
} ]
}, {
"decoder" : "list_int",
"input" : {
"a" : 1
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected array",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "object",
"expected" : "array"
},
"path" : ""
} ]
}, {
"decoder" : "list_int",
"input" : null,
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "list_non_empty",
"input" : [ ],
"issues" : [ {
"code" : "too_small",
"message" : "must not be empty",
"message_key" : "too_small.nonempty",
"meta" : {
"actual" : 0,
"min" : 1
},
"path" : ""
} ]
}, {
"decoder" : "list_min_2",
"input" : [ 1 ],
"issues" : [ {
"code" : "too_small",
"message" : "must have at least 2 elements",
"message_key" : "too_small",
"meta" : {
"actual" : 1,
"min" : 2
},
"path" : ""
} ]
}, {
"decoder" : "list_max_2",
"input" : [ 1, 2, 3 ],
"issues" : [ {
"code" : "too_big",
"message" : "must have at most 2 elements",
"message_key" : "too_big",
"meta" : {
"actual" : 3,
"max" : 2
},
"path" : ""
} ]
}, {
"decoder" : "list_size_2",
"input" : [ 1 ],
"issues" : [ {
"code" : "invalid_size",
"message" : "must have exactly 2 elements",
"message_key" : "invalid_size",
"meta" : {
"actual" : 1,
"expected" : 2
},
"path" : ""
} ]
}, {
"decoder" : "list_unique",
"input" : [ 1, 2, 1, 3, 2, 1 ],
"issues" : [ {
"code" : "duplicate_element",
"message" : "must not contain duplicates: [1, 2]",
"message_key" : "duplicate_element",
"meta" : {
"duplicates" : [ 1, 2 ]
},
"path" : ""
} ]
}, {
"decoder" : "person",
"input" : {
"name" : "Ken",
"age" : 30
},
"ok" : [ "Ken", 30 ]
}, {
"decoder" : "person",
"input" : { },
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/name"
}, {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/age"
} ]
}, {
"decoder" : "person",
"input" : {
"name" : 1,
"age" : "x"
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected string",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "string"
},
"path" : "/name"
}, {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/age"
} ]
}, {
"decoder" : "person",
"input" : [ 1 ],
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "array",
"expected" : "object"
},
"path" : "/name"
}, {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "array",
"expected" : "object"
},
"path" : "/age"
} ]
}, {
"decoder" : "person",
"input" : null,
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "null",
"expected" : "object"
},
"path" : "/name"
}, {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "null",
"expected" : "object"
},
"path" : "/age"
} ]
}, {
"decoder" : "person",
"input" : "str",
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "object"
},
"path" : "/name"
}, {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "object"
},
"path" : "/age"
} ]
}, {
"decoder" : "person_strict",
"input" : {
"name" : "Ken",
"age" : 30,
"zeta" : 1,
"alpha" : 2
},
"issues" : [ {
"code" : "unknown_field",
"message" : "unknown field",
"message_key" : "unknown_field",
"meta" : {
"field" : "zeta"
},
"path" : "/zeta"
}, {
"code" : "unknown_field",
"message" : "unknown field",
"message_key" : "unknown_field",
"meta" : {
"field" : "alpha"
},
"path" : "/alpha"
} ]
}, {
"decoder" : "person_strict",
"input" : {
"name" : 1,
"age" : 30,
"extra" : true
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected string",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "string"
},
"path" : "/name"
}, {
"code" : "unknown_field",
"message" : "unknown field",
"message_key" : "unknown_field",
"meta" : {
"field" : "extra"
},
"path" : "/extra"
} ]
}, {
"decoder" : "person_strict",
"input" : [ 1 ],
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "array",
"expected" : "object"
},
"path" : "/name"
}, {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "array",
"expected" : "object"
},
"path" : "/age"
} ]
}, {
"decoder" : "escaped_keys",
"input" : { },
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/a~1b"
}, {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/~0c"
} ]
}, {
"decoder" : "optional",
"input" : {
"id" : 1
},
"ok" : [ 1, null ]
}, {
"decoder" : "optional",
"input" : {
"id" : 1,
"nick" : "k"
},
"ok" : [ 1, "k" ]
}, {
"decoder" : "optional",
"input" : {
"id" : 1,
"nick" : null
},
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/nick"
} ]
}, {
"decoder" : "optional",
"input" : {
"id" : 1,
"nick" : 3
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected string",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "string"
},
"path" : "/nick"
} ]
}, {
"decoder" : "nullable",
"input" : {
"id" : 1,
"note" : null
},
"ok" : [ 1, null ]
}, {
"decoder" : "nullable",
"input" : {
"id" : 1
},
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/note"
} ]
}, {
"decoder" : "nullable",
"input" : {
"id" : 1,
"note" : "x"
},
"ok" : [ 1, "x" ]
}, {
"decoder" : "presence",
"input" : {
"id" : 1
},
"ok" : [ 1, "absent" ]
}, {
"decoder" : "presence",
"input" : {
"id" : 1,
"n" : null
},
"ok" : [ 1, "null" ]
}, {
"decoder" : "presence",
"input" : {
"id" : 1,
"n" : 5
},
"ok" : [ 1, {
"present" : 5
} ]
}, {
"decoder" : "presence",
"input" : {
"id" : 1,
"n" : "x"
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/n"
} ]
}, {
"decoder" : "nested",
"input" : {
"items" : [ {
"name" : "a",
"qty" : 1
}, {
"qty" : "x"
}, {
"name" : "",
"qty" : 0
} ]
},
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/items/1/name"
}, {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/items/1/qty"
}, {
"code" : "blank",
"message" : "must not be blank",
"message_key" : "blank",
"meta" : { },
"path" : "/items/2/name"
}, {
"code" : "out_of_range",
"message" : "must be positive",
"message_key" : "out_of_range.positive",
"meta" : {
"actual" : 0,
"min" : 1
},
"path" : "/items/2/qty"
} ]
}, {
"decoder" : "nested",
"input" : {
"items" : "x"
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected array",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "array"
},
"path" : "/items"
} ]
}, {
"decoder" : "dict",
"input" : {
"a" : 1,
"b" : "x",
"c" : 3
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/b"
} ]
}, {
"decoder" : "dict",
"input" : [ 1 ],
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "array",
"expected" : "object"
},
"path" : ""
} ]
}, {
"decoder" : "enum",
"input" : "RED",
"ok" : "red"
}, {
"decoder" : "enum",
"input" : "blue",
"issues" : [ {
"code" : "invalid_format",
"message" : "invalid value",
"message_key" : "invalid_format.enum",
"meta" : {
"allowed" : [ "green", "red" ]
},
"path" : ""
} ]
}, {
"decoder" : "enum",
"input" : 1,
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected string",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "string"
},
"path" : ""
} ]
}, {
"decoder" : "literal",
"input" : "v1",
"ok" : "v1"
}, {
"decoder" : "literal",
"input" : "v2",
"issues" : [ {
"code" : "invalid_format",
"message" : "invalid value",
"message_key" : "invalid_format.literal",
"meta" : {
"expected" : "v1"
},
"path" : ""
} ]
}, {
"decoder" : "shape",
"input" : {
"kind" : "rect",
"w" : 2,
"h" : 3
},
"ok" : 6
}, {
"decoder" : "shape",
"input" : {
"kind" : "circle"
},
"issues" : [ {
"code" : "not_allowed",
"message" : "must be one of [rect, square]",
"message_key" : "not_allowed",
"meta" : {
"allowed" : [ "rect", "square" ]
},
"path" : "/kind"
} ]
}, {
"decoder" : "shape",
"input" : { },
"issues" : [ {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/kind"
} ]
}, {
"decoder" : "shape",
"input" : {
"kind" : "rect",
"w" : "2"
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/w"
}, {
"code" : "required",
"message" : "is required",
"message_key" : "required",
"meta" : { },
"path" : "/h"
} ]
}, {
"decoder" : "one_of",
"input" : 5,
"ok" : "5"
}, {
"decoder" : "one_of",
"input" : "abc",
"ok" : "abc"
}, {
"decoder" : "one_of",
"input" : "ab",
"issues" : [ {
"code" : "one_of_failed",
"message" : "no variant matched",
"message_key" : "one_of_failed",
"meta" : {
"candidates" : [ {
"candidate" : 0,
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : ""
} ]
}, {
"candidate" : 1,
"issues" : [ {
"code" : "too_short",
"message" : "must be at least 3 characters",
"meta" : {
"actual" : 2,
"min" : 3
},
"path" : ""
} ]
} ]
},
"path" : ""
} ]
}, {
"decoder" : "with_default",
"input" : { },
"ok" : [ 0, 1 ]
}, {
"decoder" : "with_default",
"input" : {
"page" : null
},
"ok" : [ 0, 1 ]
}, {
"decoder" : "with_default",
"input" : {
"page" : "x"
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/page"
} ]
}, {
"decoder" : "recover",
"input" : {
"page" : "x"
},
"ok" : [ 0, 1 ]
}, {
"decoder" : "period",
"input" : {
"start" : 1,
"end" : 2
},
"ok" : [ 1, 2 ]
}, {
"decoder" : "period",
"input" : {
"start" : 3,
"end" : 2
},
"issues" : [ {
"code" : "invalid_value",
"message" : "end is before start",
"message_key" : "invalid_value",
"meta" : { },
"path" : "/end"
} ]
}, {
"decoder" : "period",
"input" : {
"start" : "a",
"end" : "b"
},
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/start"
}, {
"code" : "type_mismatch",
"message" : "expected integer",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "integer"
},
"path" : "/end"
} ]
}, {
"decoder" : "string_trim",
"input" : "\u0000abc",
"ok" : "\u0000abc"
}, {
"decoder" : "string_trim",
"input" : " 山田 ",
"ok" : "山田"
}, {
"decoder" : "string_trim",
"input" : " x ",
"ok" : "x"
}, {
"decoder" : "string_trim",
"input" : "\t x \n",
"ok" : "x"
}, {
"decoder" : "string_trim",
"input" : "
x
",
"ok" : "x"
}, {
"decoder" : "string_trim",
"input" : "\u001Fx\u001F",
"ok" : "\u001Fx\u001F"
}, {
"decoder" : "string_non_blank",
"input" : " ",
"issues" : [ {
"code" : "blank",
"message" : "must not be blank",
"message_key" : "blank",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_non_blank",
"input" : " ",
"issues" : [ {
"code" : "blank",
"message" : "must not be blank",
"message_key" : "blank",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_non_blank",
"input" : " ",
"issues" : [ {
"code" : "blank",
"message" : "must not be blank",
"message_key" : "blank",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_non_blank",
"input" : "\u001C",
"ok" : "\u001C"
}, {
"decoder" : "string_non_blank",
"input" : "
",
"issues" : [ {
"code" : "blank",
"message" : "must not be blank",
"message_key" : "blank",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_non_blank",
"input" : "",
"ok" : ""
}, {
"decoder" : "string_non_blank",
"input" : "
",
"issues" : [ {
"code" : "blank",
"message" : "must not be blank",
"message_key" : "blank",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_min_3",
"input" : "😀😀",
"issues" : [ {
"code" : "too_short",
"message" : "must be at least 3 characters",
"message_key" : "too_short",
"meta" : {
"actual" : 2,
"min" : 3
},
"path" : ""
} ]
}, {
"decoder" : "string_max_3",
"input" : "😀😀😀😀",
"issues" : [ {
"code" : "too_long",
"message" : "must be at most 3 characters",
"message_key" : "too_long",
"meta" : {
"actual" : 4,
"max" : 3
},
"path" : ""
} ]
}, {
"decoder" : "string_one_of_astral",
"input" : "z",
"issues" : [ {
"code" : "not_allowed",
"message" : "must be one of [A, 😀]",
"message_key" : "not_allowed",
"meta" : {
"actual" : "z",
"allowed" : [ "A", "😀" ]
},
"path" : ""
} ]
}, {
"decoder" : "string_lower",
"input" : "ΟΔΟΣ",
"ok" : "οδος"
}, {
"decoder" : "string_lower",
"input" : "İ",
"ok" : "i̇"
}, {
"decoder" : "string_upper",
"input" : "ß",
"ok" : "SS"
}, {
"decoder" : "string_upper",
"input" : "fi",
"ok" : "FI"
}, {
"decoder" : "string_ipv6",
"input" : "::ffff:1.2.3.4",
"ok" : "::ffff:1.2.3.4"
}, {
"decoder" : "string_ipv6",
"input" : "fe80::1%1",
"ok" : "fe80::1%1"
}, {
"decoder" : "string_ipv6",
"input" : "::1.2.3.4",
"ok" : "::1.2.3.4"
}, {
"decoder" : "string_ipv6",
"input" : "::",
"ok" : "::"
}, {
"decoder" : "string_ipv6",
"input" : "1::2::3",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IPv6 address",
"message_key" : "invalid_format.ipv6",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ip",
"input" : "::ffff:1.2.3.4",
"ok" : "::ffff:1.2.3.4"
}, {
"decoder" : "string_email",
"input" : "ä@b.co",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid email",
"message_key" : "invalid_format.email",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_email",
"input" : "a@b.co",
"ok" : "a@b.co"
}, {
"decoder" : "string_uuid",
"input" : "123E4567-E89B-12D3-A456-426614174000",
"ok" : "123e4567-e89b-12d3-a456-426614174000"
}, {
"decoder" : "string_uuid",
"input" : "123e4567e89b12d3a456426614174000",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid UUID",
"message_key" : "invalid_format.uuid",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_uuid",
"input" : "{123e4567-e89b-12d3-a456-426614174000}",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid UUID",
"message_key" : "invalid_format.uuid",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_uuid",
"input" : "1-1-1-1-1",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid UUID",
"message_key" : "invalid_format.uuid",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_url",
"input" : "http://my_host.com",
"ok" : "http://my_host.com"
}, {
"decoder" : "string_url",
"input" : "https://example.com",
"ok" : "https://example.com"
}, {
"decoder" : "string_url",
"input" : "https://日本.jp/",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid URL",
"message_key" : "invalid_format.url",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_url",
"input" : "http://example.com:99999/",
"ok" : "http://example.com:99999/"
}, {
"decoder" : "int",
"input_json" : "-0",
"ok" : 0
}, {
"decoder" : "long",
"input_json" : "-0",
"ok" : 0
}, {
"decoder" : "long",
"input_json" : "-0.0",
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected long",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "long"
},
"path" : ""
} ]
}, {
"decoder" : "long",
"input" : 1.0E30,
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected long",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "number",
"expected" : "long"
},
"path" : ""
} ]
}, {
"decoder" : "long",
"input_json" : "12345678901234567890",
"issues" : [ {
"code" : "type_mismatch",
"message" : "value is outside the long range",
"message_key" : "type_mismatch.numeric_range",
"meta" : {
"expected" : "long"
},
"path" : ""
} ]
}, {
"decoder" : "double_min_1e7",
"input" : 1,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be at least 1.0E7",
"message_key" : "out_of_range.minimum",
"meta" : {
"actual" : 1.0,
"min" : 1.0E7
},
"path" : ""
} ]
}, {
"decoder" : "double_max_small",
"input" : 1,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be at most 1.0E-4",
"message_key" : "out_of_range.maximum",
"meta" : {
"actual" : 1.0,
"max" : 1.0E-4
},
"path" : ""
} ]
}, {
"decoder" : "double_one_of_big",
"input" : 3,
"issues" : [ {
"code" : "not_allowed",
"message" : "must be one of [0.5, 1.0E7]",
"message_key" : "not_allowed",
"meta" : {
"actual" : 3.0,
"allowed" : [ 0.5, 1.0E7 ]
},
"path" : ""
} ]
}, {
"decoder" : "decimal",
"input" : 1.0E-4,
"ok" : 0.00010
}, {
"decoder" : "decimal_min_small",
"input" : 1.0E-4,
"issues" : [ {
"code" : "out_of_range",
"message" : "must be at least 0.0005",
"message_key" : "out_of_range.minimum",
"meta" : {
"actual" : 0.00010,
"min" : 0.0005
},
"path" : ""
} ]
}, {
"decoder" : "optional_only",
"input" : {
"a" : "x"
},
"ok" : [ "x", null ]
}, {
"decoder" : "optional_only",
"input" : { },
"ok" : [ null, null ]
}, {
"decoder" : "optional_only",
"input" : "x",
"ok" : [ null, null ]
}, {
"decoder" : "optional_only",
"input" : null,
"ok" : [ null, null ]
}, {
"decoder" : "optional_only",
"input" : [ 1 ],
"ok" : [ null, null ]
}, {
"decoder" : "shape",
"input" : "rect",
"issues" : [ {
"code" : "type_mismatch",
"message" : "expected object",
"message_key" : "type_mismatch",
"meta" : {
"actual" : "string",
"expected" : "object"
},
"path" : "/kind"
} ]
}, {
"decoder" : "string_ipv6",
"input" : "::1%lo0",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IPv6 address",
"message_key" : "invalid_format.ipv6",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ipv6",
"input" : "fe80::1%eth0",
"ok" : "fe80::1%eth0"
}, {
"decoder" : "string_ipv6",
"input" : "ff0e::1%x",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IPv6 address",
"message_key" : "invalid_format.ipv6",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ipv6",
"input" : "ff02::1%x",
"ok" : "ff02::1%x"
}, {
"decoder" : "string_ipv6",
"input" : "::00001",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IPv6 address",
"message_key" : "invalid_format.ipv6",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ipv6",
"input" : "[::1]",
"issues" : [ {
"code" : "invalid_format",
"message" : "not a valid IPv6 address",
"message_key" : "invalid_format.ipv6",
"meta" : { },
"path" : ""
} ]
}, {
"decoder" : "string_ip",
"input" : "fe80::1%eth0",
"ok" : "fe80::1%eth0"
}, {
"decoder" : "enum",
"input" : "Red",
"ok" : "red"
}, {
"decoder" : "string_trim",
"input" : "x",
"ok" : "x"
}, {
"decoder" : "long",
"input_json" : "123456789012345678901",
"issues" : [ {
"code" : "type_mismatch",
"message" : "value is outside the long range",
"message_key" : "type_mismatch.numeric_range",
"meta" : {
"expected" : "long"
},
"path" : ""
} ]
}, {
"decoder" : "int",
"input_json" : "3000000000",
"issues" : [ {
"code" : "type_mismatch",
"message" : "value is outside the integer range",
"message_key" : "type_mismatch.numeric_range",
"meta" : {
"expected" : "integer"
},
"path" : ""
} ]
} ]