Skip to content

Commit

Permalink
Merge pull request #125 from danma3x/error_text
Browse files Browse the repository at this point in the history
initial error message reformat
  • Loading branch information
greyblake committed Feb 25, 2024
2 parents c8e3f72 + d53bbf4 commit ec3f1fa
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 37 deletions.
5 changes: 3 additions & 2 deletions nutype_macros/src/any/gen/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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! {
Expand Down Expand Up @@ -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))
},
});

Expand Down
29 changes: 15 additions & 14 deletions nutype_macros/src/float/gen/error.rs
Original file line number Diff line number Diff line change
@@ -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},
Expand All @@ -8,13 +8,13 @@ use crate::common::{

use super::super::models::FloatValidator;

pub fn gen_validation_error_type<T>(
pub fn gen_validation_error_type<T: ToTokens>(
type_name: &TypeName,
validators: &[FloatValidator<T>],
) -> 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! {
Expand Down Expand Up @@ -62,28 +62,29 @@ fn gen_definition<T>(
}
}

fn gen_impl_display_trait<T>(
fn gen_impl_display_trait<T: ToTokens>(
type_name: &TypeName,
error_type_name: &ErrorTypeName,
validators: &[FloatValidator<T>],
) -> 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))
},
});

Expand Down
27 changes: 14 additions & 13 deletions nutype_macros/src/integer/gen/error.rs
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
use proc_macro2::TokenStream;
use quote::quote;
use quote::{quote, ToTokens};

use super::super::models::IntegerValidator;
use crate::common::{
gen::error::{gen_error_type_name, gen_impl_error_trait},
models::{ErrorTypeName, TypeName},
};

pub fn gen_validation_error_type<T>(
pub fn gen_validation_error_type<T: ToTokens>(
type_name: &TypeName,
validators: &[IntegerValidator<T>],
) -> 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! {
Expand Down Expand Up @@ -58,25 +58,26 @@ fn gen_definition<T>(
}
}

fn gen_impl_display_trait<T>(
fn gen_impl_display_trait<T: ToTokens>(
type_name: &TypeName,
error_type_name: &ErrorTypeName,
validators: &[IntegerValidator<T>],
) -> 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))
},
});

Expand Down
17 changes: 9 additions & 8 deletions nutype_macros/src/string/gen/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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! {
Expand Down Expand Up @@ -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))
},
});

Expand Down

0 comments on commit ec3f1fa

Please sign in to comment.