A library reading IDL input and generating corresponding Rust data types
Put this in your Cargo.toml: ```toml
[dependencies] rtps-idl = "0.1" ```
The IDL types are mapped onto Rust as follows.
If a type-mapping has not been decided, it is marked with 'NA'.
As RTPS is a data-centric framework in contrast to
the the original OO background, the focus is put onto data structures, and ignoring interfaces and structures so far.
| IDL-Type | Rust-Type | | ------------- |:-------------:| | module | module | | boolean | bool | | char/wchar | char | | octet | u8 | | string/wstring | std::string::String | | short | i16 | | long | i32 | | long long | i64 | | unsigned short | u16 | | unsigned long | u32 | | unsigned long long | u64 | | float | f32 | | double | f64 | | fixed | NA | | enum | enum | | union | enum | | struct | struct | | sequence | std::vec::Vec | | array, eg. 'T a[N]' | native array '[T;N]' | | interface (non abstract) | NA | | interface (abstract) | NA | | constant (not within interface) | const | | constant (within an interface) | NA | | exception | std::result::Result | | Any | NA | | type declarations nested within interfaces | NA | | typedef | type | | pseudo objects | NA | | readonly attribute | NA | | readwrite attribute | NA | | operation | NA |
| IDL | Rust |
| ----- | ----- |
| sequence<octet>
| std::vec::Vec<u8>
|
| IDL | Rust |
| ----- | ----- |
| typedef long Foo; | pub type Foo = i32; |
| typedef short Foo[2]; | pub type Foo = [i16;2] |
| typedef short Foo[2][3]; | pub type Foo = [[i16; 2]; 3] |
| typedef sequence
| IDL | Rust |
| ----- | ----- |
| struct Foo {
long l;
short s;
} | pub struct Foo {
l: i32,
s: i16;
} |
| IDL | Rust |
| ----- | ----- |
| union Foo switch (long) {
case LABEL0: long l;
case LABEL1:
case LABEL2: short s;
default: octet o[8];
} | pub enum Foo {
LABEL0{l: i32},
LABEL2{s: i16},
LABEL1{s: i16},
default{o: [u8; 8]},
} |
The underlying parser-generator being used is PEST
The original IDL-v4 grammar stems from kpansky, and has been adapted for the needs of this project.
The CDR Serde implementation will be the cdr-rs project at github.