diff --git a/crates/serde_valid/tests/range_test.rs b/crates/serde_valid/tests/range_test.rs index 985c120..e7b2e1b 100644 --- a/crates/serde_valid/tests/range_test.rs +++ b/crates/serde_valid/tests/range_test.rs @@ -76,6 +76,9 @@ fn range_minimum_minus_is_err() { let s = TestStruct { val: -2 }; assert!(s.validate().is_err()); + + let s = TestStruct { val: -1 }; + assert!(s.validate().is_ok()); } #[test] @@ -267,6 +270,21 @@ fn range_inclusive_err_message() { ); } +#[test] +fn range_minimum_minus_with_message_is_err() { + #[derive(Validate)] + struct TestStruct { + #[validate(minimum = -1, message = "foo")] + val: i32, + } + + let s = TestStruct { val: -2 }; + assert!(s.validate().is_err()); + + let s = TestStruct { val: -1 }; + assert!(s.validate().is_ok()); +} + #[test] fn range_exclusive_err_message() { #[derive(Validate)] diff --git a/crates/serde_valid_derive/src/attribute/field_validate/meta/meta_name_value.rs b/crates/serde_valid_derive/src/attribute/field_validate/meta/meta_name_value.rs index 0385cca..5576542 100644 --- a/crates/serde_valid_derive/src/attribute/field_validate/meta/meta_name_value.rs +++ b/crates/serde_valid_derive/src/attribute/field_validate/meta/meta_name_value.rs @@ -32,28 +32,23 @@ pub fn extract_field_validator_from_meta_name_value( ) -> Result { match validation_type { MetaNameValueFieldValidation::Minimum => { - let validation_value = get_lit(&validation.value)?; - - extract_numeric_minimum_validator(field, validation_value, message_format, rename_map) + extract_numeric_minimum_validator(field, &validation.value, message_format, rename_map) } MetaNameValueFieldValidation::Maximum => { - let validation_value = get_lit(&validation.value)?; - extract_numeric_maximum_validator(field, validation_value, message_format, rename_map) + extract_numeric_maximum_validator(field, &validation.value, message_format, rename_map) } MetaNameValueFieldValidation::ExclusiveMinimum => { - let validation_value = get_lit(&validation.value)?; extract_numeric_exclusive_minimum_validator( field, - validation_value, + &validation.value, message_format, rename_map, ) } MetaNameValueFieldValidation::ExclusiveMaximum => { - let validation_value = get_lit(&validation.value)?; extract_numeric_exclusive_maximum_validator( field, - validation_value, + &validation.value, message_format, rename_map, ) diff --git a/crates/serde_valid_derive/src/attribute/field_validate/numeric/range.rs b/crates/serde_valid_derive/src/attribute/field_validate/numeric/range.rs index 8d98268..e22f89a 100644 --- a/crates/serde_valid_derive/src/attribute/field_validate/numeric/range.rs +++ b/crates/serde_valid_derive/src/attribute/field_validate/numeric/range.rs @@ -1,4 +1,3 @@ -use crate::attribute::common::lit::get_numeric; use crate::attribute::common::message_format::MessageFormat; use crate::attribute::Validator; use crate::serde::rename::RenameMap; @@ -14,7 +13,7 @@ macro_rules! extract_numeric_range_validator{ paste::paste! { pub fn []( field: &impl Field, - validation_value: &syn::Lit, + validation_value: &syn::Expr, message_format: MessageFormat, rename_map: &RenameMap, ) -> Result { @@ -23,7 +22,7 @@ macro_rules! extract_numeric_range_validator{ fn []( field: &impl Field, - validation_value: &syn::Lit, + validation_value: &syn::Expr, message_format: MessageFormat, rename_map: &RenameMap, ) -> Result { @@ -32,12 +31,11 @@ macro_rules! extract_numeric_range_validator{ let field_key = field.key(); let rename = rename_map.get(field_name).unwrap_or(&field_key); let errors = field.errors_variable(); - let [<$ErrorType:snake>] = get_numeric(validation_value)?; Ok(quote!( if let Err(__composited_error_params) = ::serde_valid::validation::[]::[]( #field_ident, - #[<$ErrorType:snake>], + #validation_value, ) { use ::serde_valid::validation::IntoError; use ::serde_valid::validation::error::FormatDefault;