Skip to content

Commit ec3f1fa

Browse files
authored
Merge pull request #125 from danma3x/error_text
initial error message reformat
2 parents c8e3f72 + d53bbf4 commit ec3f1fa

File tree

4 files changed

+41
-37
lines changed

4 files changed

+41
-37
lines changed

nutype_macros/src/any/gen/error.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::{
1212
pub fn gen_validation_error_type(type_name: &TypeName, validators: &[AnyValidator]) -> TokenStream {
1313
let error_type_name = gen_error_type_name(type_name);
1414
let definition = gen_definition(&error_type_name, validators);
15-
let impl_display_trait = gen_impl_display_trait(&error_type_name, validators);
15+
let impl_display_trait = gen_impl_display_trait(type_name, &error_type_name, validators);
1616
let impl_error_trait = gen_impl_error_trait(&error_type_name);
1717

1818
quote! {
@@ -43,12 +43,13 @@ fn gen_definition(error_type_name: &ErrorTypeName, validators: &[AnyValidator])
4343
}
4444

4545
fn gen_impl_display_trait(
46+
type_name: &TypeName,
4647
error_type_name: &ErrorTypeName,
4748
validators: &[AnyValidator],
4849
) -> TokenStream {
4950
let match_arms = validators.iter().map(|validator| match validator {
5051
AnyValidator::Predicate(_) => quote! {
51-
#error_type_name::PredicateViolated => write!(f, "invalid")
52+
#error_type_name::PredicateViolated => write!(f, "{} failed the predicate test.", stringify!(#type_name))
5253
},
5354
});
5455

nutype_macros/src/float/gen/error.rs

+15-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use proc_macro2::TokenStream;
2-
use quote::quote;
2+
use quote::{quote, ToTokens};
33

44
use crate::common::{
55
gen::error::{gen_error_type_name, gen_impl_error_trait},
@@ -8,13 +8,13 @@ use crate::common::{
88

99
use super::super::models::FloatValidator;
1010

11-
pub fn gen_validation_error_type<T>(
11+
pub fn gen_validation_error_type<T: ToTokens>(
1212
type_name: &TypeName,
1313
validators: &[FloatValidator<T>],
1414
) -> TokenStream {
1515
let error_type_name = gen_error_type_name(type_name);
1616
let definition = gen_definition(&error_type_name, validators);
17-
let impl_display_trait = gen_impl_display_trait(&error_type_name, validators);
17+
let impl_display_trait = gen_impl_display_trait(type_name, &error_type_name, validators);
1818
let impl_error_trait = gen_impl_error_trait(&error_type_name);
1919

2020
quote! {
@@ -62,28 +62,29 @@ fn gen_definition<T>(
6262
}
6363
}
6464

65-
fn gen_impl_display_trait<T>(
65+
fn gen_impl_display_trait<T: ToTokens>(
66+
type_name: &TypeName,
6667
error_type_name: &ErrorTypeName,
6768
validators: &[FloatValidator<T>],
6869
) -> TokenStream {
6970
let match_arms = validators.iter().map(|validator| match validator {
70-
FloatValidator::Greater(_) => quote! {
71-
#error_type_name::GreaterViolated => write!(f, "too small")
71+
FloatValidator::Greater(val) => quote! {
72+
#error_type_name::GreaterViolated => write!(f, "{} is too small. The value must be greater than {:#?}.", stringify!(#type_name), #val)
7273
},
73-
FloatValidator::GreaterOrEqual(_) => quote! {
74-
#error_type_name::GreaterOrEqualViolated => write!(f, "too small")
74+
FloatValidator::GreaterOrEqual(val) => quote! {
75+
#error_type_name::GreaterOrEqualViolated => write!(f, "{} is too small. The value must be greater or equal to {:#?}.", stringify!(#type_name), #val)
7576
},
76-
FloatValidator::LessOrEqual(_) => quote! {
77-
#error_type_name::LessOrEqualViolated=> write!(f, "too big")
77+
FloatValidator::LessOrEqual(val) => quote! {
78+
#error_type_name::LessOrEqualViolated=> write!(f, "{} is too big. The value must be less than {:#?}.", stringify!(#type_name), #val)
7879
},
79-
FloatValidator::Less(_) => quote! {
80-
#error_type_name::LessViolated=> write!(f, "too big")
80+
FloatValidator::Less(val) => quote! {
81+
#error_type_name::LessViolated=> write!(f, "{} is too big. The value must be less or equal to {:#?}.", stringify!(#type_name), #val)
8182
},
8283
FloatValidator::Predicate(_) => quote! {
83-
#error_type_name::PredicateViolated => write!(f, "invalid")
84+
#error_type_name::PredicateViolated => write!(f, "{} failed the predicate test.", stringify!(#type_name))
8485
},
8586
FloatValidator::Finite => quote! {
86-
#error_type_name::FiniteViolated => write!(f, "not finite")
87+
#error_type_name::FiniteViolated => write!(f, "{} is not finite.", stringify!(#type_name))
8788
},
8889
});
8990

nutype_macros/src/integer/gen/error.rs

+14-13
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
use proc_macro2::TokenStream;
2-
use quote::quote;
2+
use quote::{quote, ToTokens};
33

44
use super::super::models::IntegerValidator;
55
use crate::common::{
66
gen::error::{gen_error_type_name, gen_impl_error_trait},
77
models::{ErrorTypeName, TypeName},
88
};
99

10-
pub fn gen_validation_error_type<T>(
10+
pub fn gen_validation_error_type<T: ToTokens>(
1111
type_name: &TypeName,
1212
validators: &[IntegerValidator<T>],
1313
) -> TokenStream {
1414
let error_type_name = gen_error_type_name(type_name);
1515
let definition = gen_definition(&error_type_name, validators);
16-
let impl_display_trait = gen_impl_display_trait(&error_type_name, validators);
16+
let impl_display_trait = gen_impl_display_trait(type_name, &error_type_name, validators);
1717
let impl_error_trait = gen_impl_error_trait(&error_type_name);
1818

1919
quote! {
@@ -58,25 +58,26 @@ fn gen_definition<T>(
5858
}
5959
}
6060

61-
fn gen_impl_display_trait<T>(
61+
fn gen_impl_display_trait<T: ToTokens>(
62+
type_name: &TypeName,
6263
error_type_name: &ErrorTypeName,
6364
validators: &[IntegerValidator<T>],
6465
) -> TokenStream {
6566
let match_arms = validators.iter().map(|validator| match validator {
66-
IntegerValidator::Greater(_) => quote! {
67-
#error_type_name::GreaterViolated => write!(f, "too small")
67+
IntegerValidator::Greater(val) => quote! {
68+
#error_type_name::GreaterViolated => write!(f, "{} is too small. The value must be greater than {:#?}.", stringify!(#type_name), #val)
6869
},
69-
IntegerValidator::GreaterOrEqual(_) => quote! {
70-
#error_type_name::GreaterOrEqualViolated => write!(f, "too small")
70+
IntegerValidator::GreaterOrEqual(val) => quote! {
71+
#error_type_name::GreaterOrEqualViolated => write!(f, "{} is too small. The value must be greater or equal to {:#?}.", stringify!(#type_name), #val)
7172
},
72-
IntegerValidator::Less(_) => quote! {
73-
#error_type_name::LessViolated=> write!(f, "too big")
73+
IntegerValidator::Less(val) => quote! {
74+
#error_type_name::LessViolated=> write!(f, "{} is too big. The value must be less than {:#?}.", stringify!(#type_name), #val)
7475
},
75-
IntegerValidator::LessOrEqual(_) => quote! {
76-
#error_type_name::LessOrEqualViolated=> write!(f, "too big")
76+
IntegerValidator::LessOrEqual(val) => quote! {
77+
#error_type_name::LessOrEqualViolated=> write!(f, "{} is too big. The value must be less or equal to {:#?}.", stringify!(#type_name), #val)
7778
},
7879
IntegerValidator::Predicate(_) => quote! {
79-
#error_type_name::PredicateViolated => write!(f, "invalid")
80+
#error_type_name::PredicateViolated => write!(f, "{} failed the predicate test.", stringify!(#type_name))
8081
},
8182
});
8283

nutype_macros/src/string/gen/error.rs

+9-8
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub fn gen_validation_error_type(
1515
) -> TokenStream {
1616
let error_type_name = gen_error_type_name(type_name);
1717
let definition = gen_definition(&error_type_name, validators);
18-
let impl_display_trait = gen_impl_display_trait(&error_type_name, validators);
18+
let impl_display_trait = gen_impl_display_trait(type_name, &error_type_name, validators);
1919
let impl_error_trait = gen_impl_error_trait(&error_type_name);
2020

2121
quote! {
@@ -58,24 +58,25 @@ fn gen_definition(error_type_name: &ErrorTypeName, validators: &[StringValidator
5858
}
5959

6060
fn gen_impl_display_trait(
61+
type_name: &TypeName,
6162
error_type_name: &ErrorTypeName,
6263
validators: &[StringValidator],
6364
) -> TokenStream {
6465
let match_arms = validators.iter().map(|validator| match validator {
65-
StringValidator::LenCharMax(_len) => quote! {
66-
#error_type_name::LenCharMaxViolated => write!(f, "too long")
66+
StringValidator::LenCharMax(len_char_max) => quote! {
67+
#error_type_name::LenCharMaxViolated => write!(f, "{} is too long. The value length must be less than {:#?} character(s).", stringify!(#type_name), #len_char_max)
6768
},
68-
StringValidator::LenCharMin(_len) => quote! {
69-
#error_type_name::LenCharMinViolated => write!(f, "too short")
69+
StringValidator::LenCharMin(len_char_min) => quote! {
70+
#error_type_name::LenCharMinViolated => write!(f, "{} is too short. The value length must be more than {:#?} character(s).", stringify!(#type_name), #len_char_min)
7071
},
7172
StringValidator::NotEmpty => quote! {
72-
#error_type_name::NotEmptyViolated => write!(f, "empty")
73+
#error_type_name::NotEmptyViolated => write!(f, "{} is empty.", stringify!(#type_name))
7374
},
7475
StringValidator::Predicate(_) => quote! {
75-
#error_type_name::PredicateViolated => write!(f, "invalid")
76+
#error_type_name::PredicateViolated => write!(f, "{} failed the predicate test.", stringify!(#type_name))
7677
},
7778
StringValidator::Regex(_) => quote! {
78-
#error_type_name::RegexViolated => write!(f, "regex violated")
79+
#error_type_name::RegexViolated => write!(f, "{} violated the regular expression.", stringify!(#type_name))
7980
},
8081
});
8182

0 commit comments

Comments
 (0)