#idl #parser #template #em #msg #notice #sequence #def #convert-error #org-std-msgs

t4_idl_parser

A parser for the interface definition language (IDL) specified by Object Management Group (OMG) written in Rust. This supports IDL version 4.2.

2 releases

0.1.1 Nov 7, 2022
0.1.0 Nov 7, 2022

#2182 in Parser implementations

Download history 1/week @ 2025-01-01 28/week @ 2025-01-08 48/week @ 2025-01-15 5/week @ 2025-01-22 17/week @ 2025-01-29 49/week @ 2025-02-05 61/week @ 2025-02-12 28/week @ 2025-02-19 26/week @ 2025-02-26 46/week @ 2025-03-05 83/week @ 2025-03-12 23/week @ 2025-03-19 63/week @ 2025-03-26 34/week @ 2025-04-02 50/week @ 2025-04-09

204 downloads per month
Used in safe_drive_msg

Custom license

140KB
3K SLoC

T4 IDL Parser

A parser for the interface definition language (IDL) specified by Object Management Group (OMG) written in Rust. This supports IDL version 4.2.

Example

use t4_idl_parser::{parse, Span};
use nom_greedyerror::convert_error;

let input = r#"
// generated from rosidl_adapter/resource/msg.idl.em
// with input from example_msg/bar/Buz.msg
// generated code does not contain a copyright notice

module example_msg {
    module msg {
        struct Buz {
            string c;

            @verbatim (language="comment", text="http://wiki.ros.org/std_msgs")
            sequence<int32> o;
        };
    };
};"#;

match parse(input) {
    Ok(result) => {
        println!("{:#?}", result);
    }
    Err(e) => {
        eprintln!("{e}");
        panic!();
    }
}

This will output a result as follows.

[
    Module(
        Module {
            id: "example_msg",
            definitions: [
                Module(
                    Module {
                        id: "msg",
                        definitions: [
                            Type(
                                ConstrType(
                                    Struct(
                                        Def(
                                            StructDef {
                                                id: "Buz",
                                                members: [
                                                    Member {
                                                        type_spec: Template(
                                                            String(
                                                                UnlimitedSize,
                                                            ),
                                                        ),
                                                        declarators: [
                                                            Simple(
                                                                "c",
                                                            ),
                                                        ],
                                                    },
                                                    Member {
                                                        type_spec: Template(
                                                            Sequence(
                                                                Unlimited(
                                                                    PrimitiveType(
                                                                        Int32,
                                                                    ),
                                                                ),
                                                            ),
                                                        ),
                                                        declarators: [
                                                            Simple(
                                                                "o",
                                                            ),
                                                        ],
                                                    },
                                                ],
                                                inheritance: None,
                                            },
                                        ),
                                    ),
                                ),
                            ),
                        ],
                    },
                ),
            ],
        },
    ),
]

Limitation

C/C++ like preprocessor is not supported.

Dependencies

~1.5MB
~31K SLoC