Allow empty #[validate] attributes.

Fixes #109
This commit is contained in:
Graham Esau 2021-09-20 16:48:16 +01:00
parent 00e482c3a1
commit de7314f305
3 changed files with 10 additions and 4 deletions

View file

@ -42,6 +42,7 @@ pub struct Struct {
#[validate(required)]
required_option: Option<bool>,
#[validate(required)]
#[validate]
#[serde(flatten)]
required_flattened: Option<Inner>,
}

View file

@ -104,7 +104,7 @@ impl Attrs {
for meta_item in attrs
.iter()
.flat_map(|attr| get_meta_items(attr, attr_type, errors))
.flat_map(|attr| get_meta_items(attr, attr_type, errors, ignore_errors))
.flatten()
{
match &meta_item {
@ -201,6 +201,7 @@ fn get_meta_items(
attr: &syn::Attribute,
attr_type: &'static str,
errors: &Ctxt,
ignore_errors: bool,
) -> Result<Vec<syn::NestedMeta>, ()> {
if !attr.path.is_ident(attr_type) {
return Ok(Vec::new());
@ -209,11 +210,15 @@ fn get_meta_items(
match attr.parse_meta() {
Ok(List(meta)) => Ok(meta.nested.into_iter().collect()),
Ok(other) => {
errors.error_spanned_by(other, format!("expected #[{}(...)]", attr_type));
if !ignore_errors {
errors.error_spanned_by(other, format!("expected #[{}(...)]", attr_type))
}
Err(())
}
Err(err) => {
errors.error_spanned_by(attr, err);
if !ignore_errors {
errors.error_spanned_by(attr, err)
}
Err(())
}
}

View file

@ -99,7 +99,7 @@ impl ValidationAttrs {
for meta_item in attrs
.iter()
.flat_map(|attr| get_meta_items(attr, attr_type, errors))
.flat_map(|attr| get_meta_items(attr, attr_type, errors, ignore_errors))
.flatten()
{
match &meta_item {