xidl-parser 0.69.2

A IDL codegen.
Documentation
use super::*;
use crate::hir::{Annotation, AnnotationParams, ParamAttribute, ScopedName};

fn builtin(name: &str) -> Annotation {
    Annotation::Builtin {
        name: name.to_string(),
        params: None,
    }
}

#[test]
fn semantics_helpers_cover_streams_annotations_and_collisions() {
    assert!(param_is_input(None));
    assert!(!param_is_input(Some(&ParamAttribute("out".to_string()))));
    assert!(param_is_output(Some(&ParamAttribute("out".to_string()))));
    assert!(param_is_output(Some(&ParamAttribute("inout".to_string()))));

    assert_eq!(
        stream_kind(&[builtin("server_stream")]).unwrap(),
        Some(JsonRpcMethodKind::ServerStream)
    );
    assert!(
        stream_kind(&[builtin("server_stream"), builtin("client_stream")])
            .expect_err("conflict")
            .to_string()
            .contains("mutually exclusive")
    );

    let scoped = Annotation::ScopedName {
        name: ScopedName {
            name: vec!["pkg".to_string(), "stream".to_string()],
            is_root: false,
        },
        params: Some(AnnotationParams::Raw("\"yes\"".to_string())),
    };
    assert!(has_annotation(&[scoped], "stream"));

    validate_attr_collision(
        &std::collections::HashSet::new(),
        "status",
        "get_status",
        "",
    )
    .unwrap();
    let user_ops = std::collections::HashSet::from(["get_status"]);
    assert!(
        validate_attr_collision(&user_ops, "status", "get_status", "set_status")
            .expect_err("collision")
            .to_string()
            .contains("conflicts with user-defined operation")
    );
}