2 unstable releases
0.2.0 | Jan 12, 2019 |
---|---|
0.1.0 | Jan 11, 2019 |
#7 in #rtps
Used in 2 crates
80KB
1.5K
SLoC
RTPS IDL to Rust code generator library
A library reading IDL input and generating corresponding Rust data types
Intended Features
- Converting IDL types to Rust-types
- Converting IDL types to TokenStreams (hygiene proc-macros not stable yet)
Add dependency
Put this in your Cargo.toml:
## Cargo.toml file
[dependencies]
rtps-idl = "0.1"
RTPS-IDL to Rust Mapping
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 |
Mapping by examples
Templates
IDL | Rust |
---|---|
sequence<octet> |
std::vec::Vec<u8> |
Typedef
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 Foo; | pub type Foo = std::vec::Vec |
Struct
IDL | Rust |
---|---|
struct Foo { long l; short s; } |
pub struct Foo { l: i32, s: i16; } |
Union Switch
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]}, } |
Credits
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.
Dependencies
~3.5MB
~73K SLoC