15个版本
0.7.0 | 2024年6月5日 |
---|---|
0.6.0 | 2023年4月16日 |
0.6.0-pre9 | 2022年3月15日 |
0.6.0-pre7 | 2020年9月5日 |
0.6.0-pre13 | 2022年7月14日 |
在 FFI 中排名第 58
每月下载量 1,524 次
800KB
22K SLoC
flapigen
用于将Rust编写的程序或库与其他语言连接的工具。外语言API生成器 - flapigen。原名rust_swig更改为不与swig混淆。目前实现了对 C++
和 Java
的支持,但你也可以为任何你喜欢的语言编写支持。有关如何将flapigen集成到你的项目的说明,请查看这里。
假设你有以下Rust代码
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
}
并且你想在Java中编写类似的东西
Foo foo = new Foo(5);
int res = foo.f(1, 2);
assert res == 8;
或者在你想在C++中编写类似的东西
Foo foo(5);
int res = foo.f(1, 2);
assert(res == 8);
为了实现它,flapigen建议以下功能,在Rust项目中你将写(用Rust语言)
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;
});
这就完成了,作为结果,flapigen为Rust函数生成JNI包装器以及用于调用这些JNI函数的Java代码,或者在C++和C++代码中生成用于调用这些C函数的C兼容包装器。
如果你想自动为你生成接口文件(包含 foreign_class!
等内容的文件),请查看 rifgen。
用户指南
依赖项
~5–14MB
~182K SLoC