xidl-parser 0.72.0

A IDL codegen.
Documentation
use xidl_parser::parser::parser_text;

#[test]
fn parses_raw_custom_and_doc_annotations() {
    let typed = parser_text(
        r#"
        /// doc "quoted"
        @foo::bar(key=1)
        @data_representation(XML)
        struct Item {
            /// field docs
            @id(7)
            long value;
        };

        bitmask Flags {
            /// flag docs
            @key ready
        };
        "#,
    )
    .expect("parse should succeed");

    let debug = format!("{typed:#?}");
    assert!(debug.contains("doc"));
    assert!(debug.contains("quoted"));
    assert!(debug.contains("ScopedName"));
    assert!(debug.contains("DataRepresentation"));
    assert!(debug.contains("ready"));
}

#[test]
fn parses_template_module_parameter_variants() {
    let typed = parser_text(
        r#"
        module demo {
            module Holder <typename T, interface I, sequence S, long N, string Name, boolean Flag> {
                typedef T Value;
            };
        };
        "#,
    )
    .expect("parse should succeed");

    let debug = format!("{typed:#?}");
    assert!(debug.contains("TemplateModuleDcl"));
    assert!(debug.contains("Typename"));
    assert!(debug.contains("Interface"));
    assert!(debug.contains("SequenceKeyword"));
    assert!(debug.contains("FormalParameter"));
    assert!(debug.contains("Value"));
}

#[test]
fn parses_preproc_define_call_and_include_variants() {
    let typed = parser_text(
        r#"
        #define FOO bar
        #pragma xidlc package demo.pkg
        #include "local.idl"
        #include <system.idl>
        "#,
    )
    .expect("parse should succeed");

    let debug = format!("{typed:#?}");
    assert!(debug.contains("PreprocDefine"));
    assert!(debug.contains("PreprocCall"));
    assert!(debug.contains("StringLiteral"));
    assert!(debug.contains("SystemLibString"));
}