@@ -129,12 +129,10 @@ pub enum ErrorType {
129129 // ---------------------
130130 // generic length errors - used for everything with a length except strings and bytes which need custom messages
131131 TooShort {
132- field_type : String ,
133132 min_length : usize ,
134133 actual_length : usize ,
135134 } ,
136135 TooLong {
137- field_type : String ,
138136 max_length : usize ,
139137 actual_length : usize ,
140138 } ,
@@ -414,14 +412,12 @@ impl ErrorType {
414412 Self :: TooShort { .. } => extract_context ! (
415413 TooShort ,
416414 ctx,
417- field_type: String ,
418415 min_length: usize ,
419416 actual_length: usize
420417 ) ,
421418 Self :: TooLong { .. } => extract_context ! (
422419 TooLong ,
423420 ctx,
424- field_type: String ,
425421 max_length: usize ,
426422 actual_length: usize
427423 ) ,
@@ -479,40 +475,44 @@ impl ErrorType {
479475
480476 pub fn message_template_python ( & self ) -> & ' static str {
481477 match self {
482- Self :: NoSuchAttribute { .. } => "Object has no attribute '{attribute}'" ,
483- Self :: JsonInvalid { .. } => "Invalid JSON: {error}" ,
478+ Self :: NoSuchAttribute { .. } => "Object has no attribute '{attribute}'" ,
479+ Self :: JsonInvalid { .. } => "Invalid JSON: {error}" ,
484480 Self :: JsonType => "JSON input should be string, bytes or bytearray" ,
485481 Self :: RecursionLoop => "Recursion error - cyclic reference detected" ,
486482 Self :: Missing => "Field required" ,
487483 Self :: FrozenField => "Field is frozen" ,
488484 Self :: FrozenInstance => "Instance is frozen" ,
489485 Self :: ExtraForbidden => "Extra inputs are not permitted" ,
490486 Self :: InvalidKey => "Keys should be strings" ,
491- Self :: GetAttributeError { .. } => "Error extracting attribute: {error}" ,
492- Self :: ModelType { .. } => "Input should be a valid dictionary or instance of {class_name}" ,
487+ Self :: GetAttributeError { .. } => "Error extracting attribute: {error}" ,
488+ Self :: ModelType { .. } => "Input should be a valid dictionary or instance of {class_name}" ,
493489 Self :: ModelAttributesType => "Input should be a valid dictionary or object to extract fields from" ,
494- Self :: DataclassType { .. } => "Input should be a dictionary or an instance of {class_name}" ,
495- Self :: DataclassExactType { .. } => "Input should be an instance of {class_name}" ,
490+ Self :: DataclassType { .. } => "Input should be a dictionary or an instance of {class_name}" ,
491+ Self :: DataclassExactType { .. } => "Input should be an instance of {class_name}" ,
496492 Self :: NoneRequired => "Input should be None" ,
497- Self :: GreaterThan { .. } => "Input should be greater than {gt}" ,
498- Self :: GreaterThanEqual { .. } => "Input should be greater than or equal to {ge}" ,
499- Self :: LessThan { .. } => "Input should be less than {lt}" ,
500- Self :: LessThanEqual { .. } => "Input should be less than or equal to {le}" ,
501- Self :: MultipleOf { .. } => "Input should be a multiple of {multiple_of}" ,
493+ Self :: GreaterThan { .. } => "Input should be greater than {gt}" ,
494+ Self :: GreaterThanEqual { .. } => "Input should be greater than or equal to {ge}" ,
495+ Self :: LessThan { .. } => "Input should be less than {lt}" ,
496+ Self :: LessThanEqual { .. } => "Input should be less than or equal to {le}" ,
497+ Self :: MultipleOf { .. } => "Input should be a multiple of {multiple_of}" ,
502498 Self :: FiniteNumber => "Input should be a finite number" ,
503- Self :: TooShort { ..} => "{field_type} should have at least {min_length} item{expected_plural} after validation, not {actual_length}" ,
504- Self :: TooLong { ..} => "{field_type} should have at most {max_length} item{expected_plural} after validation, not {actual_length}" ,
499+ Self :: TooShort { .. } => {
500+ "Data should have at least {min_length} item{expected_plural} after validation, not {actual_length}"
501+ }
502+ Self :: TooLong { .. } => {
503+ "Data should have at most {max_length} item{expected_plural} after validation, not {actual_length}"
504+ }
505505 Self :: IterableType => "Input should be iterable" ,
506- Self :: IterationError { .. } => "Error iterating over object, error: {error}" ,
506+ Self :: IterationError { .. } => "Error iterating over object, error: {error}" ,
507507 Self :: StringType => "Input should be a valid string" ,
508508 Self :: StringSubType => "Input should be a string, not an instance of a subclass of str" ,
509509 Self :: StringUnicode => "Input should be a valid string, unable to parse raw data as a unicode string" ,
510- Self :: StringTooShort { .. } => "String should have at least {min_length} characters" ,
511- Self :: StringTooLong { .. } => "String should have at most {max_length} characters" ,
512- Self :: StringPatternMismatch { .. } => "String should match pattern '{pattern}'" ,
513- Self :: Enum { .. } => "Input should be {expected}" ,
510+ Self :: StringTooShort { .. } => "String should have at least {min_length} characters" ,
511+ Self :: StringTooLong { .. } => "String should have at most {max_length} characters" ,
512+ Self :: StringPatternMismatch { .. } => "String should match pattern '{pattern}'" ,
513+ Self :: Enum { .. } => "Input should be {expected}" ,
514514 Self :: DictType => "Input should be a valid dictionary" ,
515- Self :: MappingType { .. } => "Input should be a valid mapping, error: {error}" ,
515+ Self :: MappingType { .. } => "Input should be a valid mapping, error: {error}" ,
516516 Self :: ListType => "Input should be a valid list" ,
517517 Self :: TupleType => "Input should be a valid tuple" ,
518518 Self :: SetType => "Input should be a valid set" ,
@@ -525,36 +525,38 @@ impl ErrorType {
525525 Self :: FloatType => "Input should be a valid number" ,
526526 Self :: FloatParsing => "Input should be a valid number, unable to parse string as a number" ,
527527 Self :: BytesType => "Input should be a valid bytes" ,
528- Self :: BytesTooShort { .. } => "Data should have at least {min_length} bytes" ,
529- Self :: BytesTooLong { .. } => "Data should have at most {max_length} bytes" ,
530- Self :: ValueError { .. } => "Value error, {error}" ,
531- Self :: AssertionError { .. } => "Assertion failed, {error}" ,
532- Self :: CustomError { .. } => "" , // custom errors are handled separately
533- Self :: LiteralError { .. } => "Input should be {expected}" ,
528+ Self :: BytesTooShort { .. } => "Data should have at least {min_length} bytes" ,
529+ Self :: BytesTooLong { .. } => "Data should have at most {max_length} bytes" ,
530+ Self :: ValueError { .. } => "Value error, {error}" ,
531+ Self :: AssertionError { .. } => "Assertion failed, {error}" ,
532+ Self :: CustomError { .. } => "" , // custom errors are handled separately
533+ Self :: LiteralError { .. } => "Input should be {expected}" ,
534534 Self :: DateType => "Input should be a valid date" ,
535- Self :: DateParsing { .. } => "Input should be a valid date in the format YYYY-MM-DD, {error}" ,
536- Self :: DateFromDatetimeParsing { .. } => "Input should be a valid date or datetime, {error}" ,
535+ Self :: DateParsing { .. } => "Input should be a valid date in the format YYYY-MM-DD, {error}" ,
536+ Self :: DateFromDatetimeParsing { .. } => "Input should be a valid date or datetime, {error}" ,
537537 Self :: DateFromDatetimeInexact => "Datetimes provided to dates should have zero time - e.g. be exact dates" ,
538538 Self :: DatePast => "Date should be in the past" ,
539539 Self :: DateFuture => "Date should be in the future" ,
540540 Self :: TimeType => "Input should be a valid time" ,
541- Self :: TimeParsing { .. } => "Input should be in a valid time format, {error}" ,
541+ Self :: TimeParsing { .. } => "Input should be in a valid time format, {error}" ,
542542 Self :: DatetimeType => "Input should be a valid datetime" ,
543- Self :: DatetimeParsing { .. } => "Input should be a valid datetime, {error}" ,
544- Self :: DatetimeObjectInvalid { .. } => "Invalid datetime object, got {error}" ,
543+ Self :: DatetimeParsing { .. } => "Input should be a valid datetime, {error}" ,
544+ Self :: DatetimeObjectInvalid { .. } => "Invalid datetime object, got {error}" ,
545545 Self :: DatetimePast => "Input should be in the past" ,
546546 Self :: DatetimeFuture => "Input should be in the future" ,
547547 Self :: TimezoneNaive => "Input should not have timezone info" ,
548548 Self :: TimezoneAware => "Input should have timezone info" ,
549- Self :: TimezoneOffset { .. } => "Timezone offset of {tz_expected} required, got {tz_actual}" ,
549+ Self :: TimezoneOffset { .. } => "Timezone offset of {tz_expected} required, got {tz_actual}" ,
550550 Self :: TimeDeltaType => "Input should be a valid timedelta" ,
551- Self :: TimeDeltaParsing { .. } => "Input should be a valid timedelta, {error}" ,
551+ Self :: TimeDeltaParsing { .. } => "Input should be a valid timedelta, {error}" ,
552552 Self :: FrozenSetType => "Input should be a valid frozenset" ,
553- Self :: IsInstanceOf { .. } => "Input should be an instance of {class}" ,
554- Self :: IsSubclassOf { .. } => "Input should be a subclass of {class}" ,
553+ Self :: IsInstanceOf { .. } => "Input should be an instance of {class}" ,
554+ Self :: IsSubclassOf { .. } => "Input should be a subclass of {class}" ,
555555 Self :: CallableType => "Input should be callable" ,
556- Self :: UnionTagInvalid { ..} => "Input tag '{tag}' found using {discriminator} does not match any of the expected tags: {expected_tags}" ,
557- Self :: UnionTagNotFound { ..} => "Unable to extract tag using discriminator {discriminator}" ,
556+ Self :: UnionTagInvalid { .. } => {
557+ "Input tag '{tag}' found using {discriminator} does not match any of the expected tags: {expected_tags}"
558+ }
559+ Self :: UnionTagNotFound { .. } => "Unable to extract tag using discriminator {discriminator}" ,
558560 Self :: ArgumentsType => "Arguments must be a tuple, list or a dictionary" ,
559561 Self :: MissingArgument => "Missing required argument" ,
560562 Self :: UnexpectedKeywordArgument => "Unexpected keyword argument" ,
@@ -563,14 +565,13 @@ impl ErrorType {
563565 Self :: MissingPositionalOnlyArgument => "Missing required positional only argument" ,
564566 Self :: MultipleArgumentValues => "Got multiple values for argument" ,
565567 Self :: UrlType => "URL input should be a string or URL" ,
566- Self :: UrlParsing { .. } => "Input should be a valid URL, {error}" ,
567- Self :: UrlSyntaxViolation { .. } => "Input violated strict URL syntax rules, {error}" ,
568- Self :: UrlTooLong { .. } => "URL should have at most {max_length} characters" ,
569- Self :: UrlScheme { .. } => "URL scheme should be {expected_schemes}" ,
568+ Self :: UrlParsing { .. } => "Input should be a valid URL, {error}" ,
569+ Self :: UrlSyntaxViolation { .. } => "Input violated strict URL syntax rules, {error}" ,
570+ Self :: UrlTooLong { .. } => "URL should have at most {max_length} characters" ,
571+ Self :: UrlScheme { .. } => "URL scheme should be {expected_schemes}" ,
570572 Self :: UuidType => "UUID input should be a string, bytes or UUID object" ,
571573 Self :: UuidParsing { .. } => "Input should be a valid UUID, {error}" ,
572- Self :: UuidVersion { .. } => "UUID version {expected_version} expected"
573-
574+ Self :: UuidVersion { .. } => "UUID version {expected_version} expected" ,
574575 }
575576 }
576577
@@ -632,20 +633,18 @@ impl ErrorType {
632633 Self :: LessThanEqual { le } => to_string_render ! ( tmpl, le) ,
633634 Self :: MultipleOf { multiple_of } => to_string_render ! ( tmpl, multiple_of) ,
634635 Self :: TooShort {
635- field_type,
636636 min_length,
637637 actual_length,
638638 } => {
639639 let expected_plural = plural_s ( * min_length) ;
640- to_string_render ! ( tmpl, field_type , min_length, actual_length, expected_plural)
640+ to_string_render ! ( tmpl, min_length, actual_length, expected_plural)
641641 }
642642 Self :: TooLong {
643- field_type,
644643 max_length,
645644 actual_length,
646645 } => {
647646 let expected_plural = plural_s ( * max_length) ;
648- to_string_render ! ( tmpl, field_type , max_length, actual_length, expected_plural)
647+ to_string_render ! ( tmpl, max_length, actual_length, expected_plural)
649648 }
650649 Self :: IterationError { error } => render ! ( tmpl, error) ,
651650 Self :: StringTooShort { min_length } => to_string_render ! ( tmpl, min_length) ,
@@ -710,15 +709,13 @@ impl ErrorType {
710709 Self :: LessThanEqual { le } => py_dict ! ( py, le) ,
711710 Self :: MultipleOf { multiple_of } => py_dict ! ( py, multiple_of) ,
712711 Self :: TooShort {
713- field_type,
714712 min_length,
715713 actual_length,
716- } => py_dict ! ( py, field_type , min_length, actual_length) ,
714+ } => py_dict ! ( py, min_length, actual_length) ,
717715 Self :: TooLong {
718- field_type,
719716 max_length,
720717 actual_length,
721- } => py_dict ! ( py, field_type , max_length, actual_length) ,
718+ } => py_dict ! ( py, max_length, actual_length) ,
722719 Self :: IterationError { error } => py_dict ! ( py, error) ,
723720 Self :: StringTooShort { min_length } => py_dict ! ( py, min_length) ,
724721 Self :: StringTooLong { max_length } => py_dict ! ( py, max_length) ,
0 commit comments