icydb-model-macros 0.303.0

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

#[test]
fn top_level_sorted_flag_emits_enum_order_guard() {
    let args =
        NestedMeta::parse_meta_list(quote!(sorted, variant(name = "A"), variant(name = "B")))
            .expect("enum args should parse");
    let mut node = Enum::from_list(&args).expect("sorted enum should lower");
    node.def = Def::new(
        syn::parse2(quote!(
            pub struct SortedExample {}
        ))
        .expect("enum input should parse as a struct"),
        crate::crate_path::CratePaths::test(),
    );

    assert!(node.sorted);
    assert!(
        node.type_part(&crate::crate_path::CratePaths::test())
            .to_string()
            .contains("remain :: sorted")
    );
}

#[test]
fn unit_enum_baseline_includes_total_rust_ordering() {
    let args = NestedMeta::parse_meta_list(quote!(variant(name = "A"), variant(name = "B")))
        .expect("enum args should parse");
    let mut node = Enum::from_list(&args).expect("enum should lower");
    node.def = Def::new(
        syn::parse2(quote!(
            pub struct OrderedUnitEnum {}
        ))
        .expect("enum input should parse as a struct"),
        crate::crate_path::CratePaths::test(),
    );

    let traits = node.traits();
    for trait_kind in [
        TraitKind::Copy,
        TraitKind::Hash,
        TraitKind::Ord,
        TraitKind::PartialOrd,
    ] {
        assert!(traits.contains(&trait_kind));
    }
}