icydb-model-macros 0.301.0

Procedural macros for IcyDB application models
Documentation
use super::List;
use crate::prelude::*;
use darling::{FromMeta, ast::NestedMeta};
use quote::quote;

#[test]
fn shape_baseline_precedes_trait_removal() {
    let args = NestedMeta::parse_meta_list(quote!(item(prim = "Nat8"), traits(remove(Deref))))
        .expect("list args should parse");
    let mut node = List::from_list(&args).expect("list should lower");
    node.def = Def::new(
        syn::parse2(quote!(
            pub struct WithoutDeref {}
        ))
        .expect("list input should parse as a struct"),
        crate::crate_path::CratePaths::test(),
    );

    node.validate().expect("shape trait should be removable");
    let traits = node.traits();
    assert!(!traits.contains(&TraitKind::Deref));
    assert!(traits.contains(&TraitKind::DerefMut));
    assert!(traits.contains(&TraitKind::From));
    assert!(traits.contains(&TraitKind::FromIterator));
    assert!(traits.contains(&TraitKind::IntoIterator));
}