rtps-idl 0.2.0

RTPS IDL to Rust code generator library

Apache 2.0 licensed

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.