Crates.io | flapigen |
lib.rs | flapigen |
version | 0.7.0 |
source | src |
created_at | 2020-06-29 22:57:38.968598 |
updated_at | 2024-06-05 13:52:42.57808 |
description | Tool for connecting libraries written in Rust with other languages |
homepage | |
repository | https://github.com/Dushistov/flapigen-rs |
max_upload_size | |
id | 259589 |
size | 994,534 |
Tool for connecting programs or libraries written in Rust with other languages.
Foreign language api generator - flapigen. Former name rust_swig was changed to not confuse
with swig.
Currently implemented support for C++
and Java
, but you can write support
for any language of your choice. For an instruction how to integrate flapigen with your
project look here.
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
}
fn set_field(&mut self, v: i32) {
self.data = v;
}
}
fn f2(a: i32) -> i32 {
a * 2
}
and you want to write in Java something like this:
Foo foo = new Foo(5);
int res = foo.f(1, 2);
assert res == 8;
or in C++ something like this:
Foo foo(5);
int res = foo.f(1, 2);
assert(res == 8);
In order to implement it flapigen suggests the following functionality, in Rust project you write (in Rust language):
foreign_class!(class Foo {
self_type Foo;
constructor Foo::new(_: i32) -> Foo;
fn Foo::set_field(&mut self, _: i32);
fn Foo::f(&self, _: i32, _: i32) -> i32;
fn f2(_: i32) -> i32;
});
and that's all, as a result flapigen generates JNI wrappers for Rust functions and Java code to call these JNI functions or generates C compatible wrappers in case of C++ and C++ code to call these C functions.
If you want the interface file (the file containing foreign_class!
and so on)
to be automatically generated for you, checkout rifgen.