Crate rust_interface_file_generator[−][src]
Expand description
This crate works with flapigen
to provide an easy to use rust code with other programming languages
This crate uses procedural macros such as #generate_interface
to locate methods and types for which interface
code would be generated automatically
Suppose you have the following Rust code:
struct Foo {
data: i32
}
impl Foo {
fn new(val: i32) -> Foo {
Foo{data: val}
}
fn f(&self, a: i32, b: i32) -> i32 {
self.data + a + b
}
///Custom doc comment
fn set_field(&mut self, v: i32) {
self.data = v;
}
}
Using flapigen
, you need to generate an interface file with contents:
foreign_class!(class Foo {
self_type Foo;
constructor Foo::new(_: i32) -> Foo;
///Custom doc comment
fn Foo::set_field(&mut self, _: i32);
fn Foo::f(&self, _: i32, _: i32) -> i32;
});
Using this crate, you can simply annotate the methods using either #[generate_interface]
, #[generate_interface(constructor)]
or #[generate_interface_doc]
First add the appropriate dependencies
In Cargo.toml
[dependencies]
rifgen = "*"
[build-dependencies]
rifgen = "*"
In build.rs
//place this code before flapigen swig_expand function
use rifgen::{Generator, TypeCases, Language};
let source_folder = "/user/projects"; //use your projects folder
let out_file = "/user/projects/glue.in";
Generator::new(TypeCases::CamelCase,Language::Java,source_folder.parse().unwrap())
.generate_interface(&out_file.parse().unwrap())
Using the example above, the modified code would be
use rifgen::rifgen_attr::*;
struct Foo {
data: i32
}
impl Foo {
#[generate_interface(constructor)]
fn new(val: i32) -> Foo {
Foo{data: val}
}
#[generate_interface]
fn f(&self, a: i32, b: i32) -> i32 {
self.data + a + b
}
///Custom doc comment
#[generate_interface]
fn set_field(&mut self, v: i32) {
self.data = v;
}
}
This crate works with doc comments so all doc comments would be preserved
Use #[generate_interface_doc]
on structs only to preserve the doc comment of the struct
///Data holder
#[generate_interface_doc]
struct Foo {
data: i32
}
For trait
just annotate the trait definition
///MyCallback documentation
#[generate_interface]
trait MyCallback {
fn on_click(&self) {
}
}
For enum
, it’s similar to trait
#[generate_interface]
enum MyEnum {
One,
Two
}
Re-exports
pub extern crate gen_attributes_interface_generator;
Structs
The builder to use in build.rs file to generate the interface file