diff --git a/nutype_macros/src/any/gen/error.rs b/nutype_macros/src/any/gen/error.rs index 8860913..df59eba 100644 --- a/nutype_macros/src/any/gen/error.rs +++ b/nutype_macros/src/any/gen/error.rs @@ -12,7 +12,7 @@ use crate::{ pub fn gen_validation_error_type(type_name: &TypeName, validators: &[AnyValidator]) -> TokenStream { let error_type_name = gen_error_type_name(type_name); let definition = gen_definition(&error_type_name, validators); - let impl_display_trait = gen_impl_display_trait(&error_type_name, validators); + let impl_display_trait = gen_impl_display_trait(type_name, &error_type_name, validators); let impl_error_trait = gen_impl_error_trait(&error_type_name); quote! { @@ -43,12 +43,13 @@ fn gen_definition(error_type_name: &ErrorTypeName, validators: &[AnyValidator]) } fn gen_impl_display_trait( + type_name: &TypeName, error_type_name: &ErrorTypeName, validators: &[AnyValidator], ) -> TokenStream { let match_arms = validators.iter().map(|validator| match validator { AnyValidator::Predicate(_) => quote! { - #error_type_name::PredicateViolated => write!(f, "invalid") + #error_type_name::PredicateViolated => write!(f, "{} failed the predicate test.", stringify!(#type_name)) }, }); diff --git a/nutype_macros/src/float/gen/error.rs b/nutype_macros/src/float/gen/error.rs index 20614f1..c00a474 100644 --- a/nutype_macros/src/float/gen/error.rs +++ b/nutype_macros/src/float/gen/error.rs @@ -1,5 +1,5 @@ use proc_macro2::TokenStream; -use quote::quote; +use quote::{quote, ToTokens}; use crate::common::{ gen::error::{gen_error_type_name, gen_impl_error_trait}, @@ -8,13 +8,13 @@ use crate::common::{ use super::super::models::FloatValidator; -pub fn gen_validation_error_type( +pub fn gen_validation_error_type( type_name: &TypeName, validators: &[FloatValidator], ) -> TokenStream { let error_type_name = gen_error_type_name(type_name); let definition = gen_definition(&error_type_name, validators); - let impl_display_trait = gen_impl_display_trait(&error_type_name, validators); + let impl_display_trait = gen_impl_display_trait(type_name, &error_type_name, validators); let impl_error_trait = gen_impl_error_trait(&error_type_name); quote! { @@ -62,28 +62,29 @@ fn gen_definition( } } -fn gen_impl_display_trait( +fn gen_impl_display_trait( + type_name: &TypeName, error_type_name: &ErrorTypeName, validators: &[FloatValidator], ) -> TokenStream { let match_arms = validators.iter().map(|validator| match validator { - FloatValidator::Greater(_) => quote! { - #error_type_name::GreaterViolated => write!(f, "too small") + FloatValidator::Greater(val) => quote! { + #error_type_name::GreaterViolated => write!(f, "{} is too small. The value must be greater than {:#?}.", stringify!(#type_name), #val) }, - FloatValidator::GreaterOrEqual(_) => quote! { - #error_type_name::GreaterOrEqualViolated => write!(f, "too small") + FloatValidator::GreaterOrEqual(val) => quote! { + #error_type_name::GreaterOrEqualViolated => write!(f, "{} is too small. The value must be greater or equal to {:#?}.", stringify!(#type_name), #val) }, - FloatValidator::LessOrEqual(_) => quote! { - #error_type_name::LessOrEqualViolated=> write!(f, "too big") + FloatValidator::LessOrEqual(val) => quote! { + #error_type_name::LessOrEqualViolated=> write!(f, "{} is too big. The value must be less than {:#?}.", stringify!(#type_name), #val) }, - FloatValidator::Less(_) => quote! { - #error_type_name::LessViolated=> write!(f, "too big") + FloatValidator::Less(val) => quote! { + #error_type_name::LessViolated=> write!(f, "{} is too big. The value must be less or equal to {:#?}.", stringify!(#type_name), #val) }, FloatValidator::Predicate(_) => quote! { - #error_type_name::PredicateViolated => write!(f, "invalid") + #error_type_name::PredicateViolated => write!(f, "{} failed the predicate test.", stringify!(#type_name)) }, FloatValidator::Finite => quote! { - #error_type_name::FiniteViolated => write!(f, "not finite") + #error_type_name::FiniteViolated => write!(f, "{} is not finite.", stringify!(#type_name)) }, }); diff --git a/nutype_macros/src/integer/gen/error.rs b/nutype_macros/src/integer/gen/error.rs index a01ed38..8bf5c32 100644 --- a/nutype_macros/src/integer/gen/error.rs +++ b/nutype_macros/src/integer/gen/error.rs @@ -1,5 +1,5 @@ use proc_macro2::TokenStream; -use quote::quote; +use quote::{quote, ToTokens}; use super::super::models::IntegerValidator; use crate::common::{ @@ -7,13 +7,13 @@ use crate::common::{ models::{ErrorTypeName, TypeName}, }; -pub fn gen_validation_error_type( +pub fn gen_validation_error_type( type_name: &TypeName, validators: &[IntegerValidator], ) -> TokenStream { let error_type_name = gen_error_type_name(type_name); let definition = gen_definition(&error_type_name, validators); - let impl_display_trait = gen_impl_display_trait(&error_type_name, validators); + let impl_display_trait = gen_impl_display_trait(type_name, &error_type_name, validators); let impl_error_trait = gen_impl_error_trait(&error_type_name); quote! { @@ -58,25 +58,26 @@ fn gen_definition( } } -fn gen_impl_display_trait( +fn gen_impl_display_trait( + type_name: &TypeName, error_type_name: &ErrorTypeName, validators: &[IntegerValidator], ) -> TokenStream { let match_arms = validators.iter().map(|validator| match validator { - IntegerValidator::Greater(_) => quote! { - #error_type_name::GreaterViolated => write!(f, "too small") + IntegerValidator::Greater(val) => quote! { + #error_type_name::GreaterViolated => write!(f, "{} is too small. The value must be greater than {:#?}.", stringify!(#type_name), #val) }, - IntegerValidator::GreaterOrEqual(_) => quote! { - #error_type_name::GreaterOrEqualViolated => write!(f, "too small") + IntegerValidator::GreaterOrEqual(val) => quote! { + #error_type_name::GreaterOrEqualViolated => write!(f, "{} is too small. The value must be greater or equal to {:#?}.", stringify!(#type_name), #val) }, - IntegerValidator::Less(_) => quote! { - #error_type_name::LessViolated=> write!(f, "too big") + IntegerValidator::Less(val) => quote! { + #error_type_name::LessViolated=> write!(f, "{} is too big. The value must be less than {:#?}.", stringify!(#type_name), #val) }, - IntegerValidator::LessOrEqual(_) => quote! { - #error_type_name::LessOrEqualViolated=> write!(f, "too big") + IntegerValidator::LessOrEqual(val) => quote! { + #error_type_name::LessOrEqualViolated=> write!(f, "{} is too big. The value must be less or equal to {:#?}.", stringify!(#type_name), #val) }, IntegerValidator::Predicate(_) => quote! { - #error_type_name::PredicateViolated => write!(f, "invalid") + #error_type_name::PredicateViolated => write!(f, "{} failed the predicate test.", stringify!(#type_name)) }, }); diff --git a/nutype_macros/src/string/gen/error.rs b/nutype_macros/src/string/gen/error.rs index d15a733..8233c1c 100644 --- a/nutype_macros/src/string/gen/error.rs +++ b/nutype_macros/src/string/gen/error.rs @@ -15,7 +15,7 @@ pub fn gen_validation_error_type( ) -> TokenStream { let error_type_name = gen_error_type_name(type_name); let definition = gen_definition(&error_type_name, validators); - let impl_display_trait = gen_impl_display_trait(&error_type_name, validators); + let impl_display_trait = gen_impl_display_trait(type_name, &error_type_name, validators); let impl_error_trait = gen_impl_error_trait(&error_type_name); quote! { @@ -58,24 +58,25 @@ fn gen_definition(error_type_name: &ErrorTypeName, validators: &[StringValidator } fn gen_impl_display_trait( + type_name: &TypeName, error_type_name: &ErrorTypeName, validators: &[StringValidator], ) -> TokenStream { let match_arms = validators.iter().map(|validator| match validator { - StringValidator::LenCharMax(_len) => quote! { - #error_type_name::LenCharMaxViolated => write!(f, "too long") + StringValidator::LenCharMax(len_char_max) => quote! { + #error_type_name::LenCharMaxViolated => write!(f, "{} is too long. The value length must be less than {:#?} character(s).", stringify!(#type_name), #len_char_max) }, - StringValidator::LenCharMin(_len) => quote! { - #error_type_name::LenCharMinViolated => write!(f, "too short") + StringValidator::LenCharMin(len_char_min) => quote! { + #error_type_name::LenCharMinViolated => write!(f, "{} is too short. The value length must be more than {:#?} character(s).", stringify!(#type_name), #len_char_min) }, StringValidator::NotEmpty => quote! { - #error_type_name::NotEmptyViolated => write!(f, "empty") + #error_type_name::NotEmptyViolated => write!(f, "{} is empty.", stringify!(#type_name)) }, StringValidator::Predicate(_) => quote! { - #error_type_name::PredicateViolated => write!(f, "invalid") + #error_type_name::PredicateViolated => write!(f, "{} failed the predicate test.", stringify!(#type_name)) }, StringValidator::Regex(_) => quote! { - #error_type_name::RegexViolated => write!(f, "regex violated") + #error_type_name::RegexViolated => write!(f, "{} violated the regular expression.", stringify!(#type_name)) }, });