Skip to content

Commit 0629f7e

Browse files
authored
Merge pull request #103 from ya7010/fix_range_with_message
fix: range validation with message.
2 parents 40b3ee1 + 3b70077 commit 0629f7e

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

crates/serde_valid/tests/range_test.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ fn range_minimum_minus_is_err() {
7676

7777
let s = TestStruct { val: -2 };
7878
assert!(s.validate().is_err());
79+
80+
let s = TestStruct { val: -1 };
81+
assert!(s.validate().is_ok());
7982
}
8083

8184
#[test]
@@ -267,6 +270,21 @@ fn range_inclusive_err_message() {
267270
);
268271
}
269272

273+
#[test]
274+
fn range_minimum_minus_with_message_is_err() {
275+
#[derive(Validate)]
276+
struct TestStruct {
277+
#[validate(minimum = -1, message = "foo")]
278+
val: i32,
279+
}
280+
281+
let s = TestStruct { val: -2 };
282+
assert!(s.validate().is_err());
283+
284+
let s = TestStruct { val: -1 };
285+
assert!(s.validate().is_ok());
286+
}
287+
270288
#[test]
271289
fn range_exclusive_err_message() {
272290
#[derive(Validate)]

crates/serde_valid_derive/src/attribute/field_validate/meta/meta_name_value.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,23 @@ pub fn extract_field_validator_from_meta_name_value(
3232
) -> Result<Validator, crate::Errors> {
3333
match validation_type {
3434
MetaNameValueFieldValidation::Minimum => {
35-
let validation_value = get_lit(&validation.value)?;
36-
37-
extract_numeric_minimum_validator(field, validation_value, message_format, rename_map)
35+
extract_numeric_minimum_validator(field, &validation.value, message_format, rename_map)
3836
}
3937
MetaNameValueFieldValidation::Maximum => {
40-
let validation_value = get_lit(&validation.value)?;
41-
extract_numeric_maximum_validator(field, validation_value, message_format, rename_map)
38+
extract_numeric_maximum_validator(field, &validation.value, message_format, rename_map)
4239
}
4340
MetaNameValueFieldValidation::ExclusiveMinimum => {
44-
let validation_value = get_lit(&validation.value)?;
4541
extract_numeric_exclusive_minimum_validator(
4642
field,
47-
validation_value,
43+
&validation.value,
4844
message_format,
4945
rename_map,
5046
)
5147
}
5248
MetaNameValueFieldValidation::ExclusiveMaximum => {
53-
let validation_value = get_lit(&validation.value)?;
5449
extract_numeric_exclusive_maximum_validator(
5550
field,
56-
validation_value,
51+
&validation.value,
5752
message_format,
5853
rename_map,
5954
)

crates/serde_valid_derive/src/attribute/field_validate/numeric/range.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use crate::attribute::common::lit::get_numeric;
21
use crate::attribute::common::message_format::MessageFormat;
32
use crate::attribute::Validator;
43
use crate::serde::rename::RenameMap;
@@ -14,7 +13,7 @@ macro_rules! extract_numeric_range_validator{
1413
paste::paste! {
1514
pub fn [<extract_numeric_ $ErrorType:snake _validator>](
1615
field: &impl Field,
17-
validation_value: &syn::Lit,
16+
validation_value: &syn::Expr,
1817
message_format: MessageFormat,
1918
rename_map: &RenameMap,
2019
) -> Result<Validator, crate::Errors> {
@@ -23,7 +22,7 @@ macro_rules! extract_numeric_range_validator{
2322

2423
fn [<inner_extract_numeric_ $ErrorType:snake _validator>](
2524
field: &impl Field,
26-
validation_value: &syn::Lit,
25+
validation_value: &syn::Expr,
2726
message_format: MessageFormat,
2827
rename_map: &RenameMap,
2928
) -> Result<TokenStream, crate::Errors> {
@@ -32,12 +31,11 @@ macro_rules! extract_numeric_range_validator{
3231
let field_key = field.key();
3332
let rename = rename_map.get(field_name).unwrap_or(&field_key);
3433
let errors = field.errors_variable();
35-
let [<$ErrorType:snake>] = get_numeric(validation_value)?;
3634

3735
Ok(quote!(
3836
if let Err(__composited_error_params) = ::serde_valid::validation::[<ValidateComposited $ErrorType>]::[<validate_composited_ $ErrorType:snake>](
3937
#field_ident,
40-
#[<$ErrorType:snake>],
38+
#validation_value,
4139
) {
4240
use ::serde_valid::validation::IntoError;
4341
use ::serde_valid::validation::error::FormatDefault;

0 commit comments

Comments
 (0)