icydb-model-macros 0.302.0

Procedural macros for IcyDB application models
Documentation
use super::Map;
use crate::prelude::*;

fn map_node() -> Map {
    Map {
        def: Def::new(
            syn::parse_quote!(
                struct TestMap;
            ),
            crate::crate_path::CratePaths::test(),
        ),
        name: None,
        key: Item {
            primitive: Some(Primitive::Text),
            unbounded: true,
            ..Default::default()
        },
        value: Value {
            item: Item {
                primitive: Some(Primitive::Nat32),
                ..Default::default()
            },
            ..Default::default()
        },
        ty: Type::default(),
        traits: TraitBuilder::default(),
    }
}

#[test]
fn map_value_relation_is_admitted() {
    let mut node = map_node();
    node.value.item.relation = Some(syn::parse_quote!(SomeEntity));

    node.validate()
        .expect("map relation values should validate");
}

#[test]
fn map_value_indirect_is_rejected() {
    let mut node = map_node();
    node.value.item.indirect = true;

    let err = node
        .validate()
        .expect_err("indirect map values should fail");
    assert!(
        err.to_string().contains("map value cannot be indirect"),
        "unexpected error: {err}"
    );
}