kenzu 0.0.7

Procedural macros for builder pattern generation and validation
Documentation
use std::collections::HashSet;
use syn::Attribute;

#[derive(Debug, Default)]
pub struct SkippedTraits {
    pub skipped: HashSet<String>,
}

impl SkippedTraits {
    pub fn is_skipped(&self, trait_name: &str) -> bool {
        self.skipped.contains(trait_name)
    }
}

pub fn get_skipped_traits(attributes: &[Attribute]) -> SkippedTraits {
    let mut skipped = HashSet::new();

    for attr in attributes {
        if attr.path().is_ident("skip_trait") {
            let _ = attr.parse_nested_meta(|meta| {
                if let Some(ident) = meta.path.get_ident() {
                    if meta.input.is_empty() {
                        skipped.insert(ident.to_string());
                        Ok(())
                    } else {
                        Err(meta.error("Trait skip does not accept a value"))
                    }
                } else {
                    Err(meta.error("Expected an identifier for trait"))
                }
            });
        }
    }

    SkippedTraits { skipped }
}