From db881b5f609abddd29a315a05c1d50d62b930398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABlle=20Huisman?= Date: Fri, 26 Dec 2025 20:15:25 +0100 Subject: [PATCH] fix: skip enum variants without validations in generated error type --- .../fortifier-macros/src/validate/enum.rs | 2 +- .../tests/validate/enum_mixed_pass.rs | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 packages/fortifier-macros/tests/validate/enum_mixed_pass.rs diff --git a/packages/fortifier-macros/src/validate/enum.rs b/packages/fortifier-macros/src/validate/enum.rs index 18490df..8f05794 100644 --- a/packages/fortifier-macros/src/validate/enum.rs +++ b/packages/fortifier-macros/src/validate/enum.rs @@ -51,7 +51,7 @@ impl<'a> ValidateEnum<'a> { let error_variant_idents = self .variants .iter() - .map(|variant| &variant.ident) + .flat_map(|variant| variant.error_type().map(|_| &variant.ident)) .collect::>(); let (error_variant_types, variant_error_types): (Vec<_>, Vec<_>) = self .variants diff --git a/packages/fortifier-macros/tests/validate/enum_mixed_pass.rs b/packages/fortifier-macros/tests/validate/enum_mixed_pass.rs new file mode 100644 index 0000000..ff2c938 --- /dev/null +++ b/packages/fortifier-macros/tests/validate/enum_mixed_pass.rs @@ -0,0 +1,32 @@ +use fortifier::{Validate, ValidationErrors}; + +#[derive(Validate)] +enum FieldType { + Boolean, + Integer, + Decimal { + #[validate(range(max = 10))] + scale: u32, + }, + String(#[validate(range(min = 1))] usize), +} + +fn main() -> Result<(), ValidationErrors> { + let data = FieldType::Boolean; + + data.validate_sync()?; + + let data = FieldType::Integer; + + data.validate_sync()?; + + let data = FieldType::Decimal { scale: 3 }; + + data.validate_sync()?; + + let data = FieldType::String(256); + + data.validate_sync()?; + + Ok(()) +}