flapigen 项目介绍
简介
flapigen 是一个用于将 Rust 语言编写的程序或库与其他语言连接的工具。该工具可生成外部语言的 API 接口,旨在让开发者更方便地在不同编程语言之间进行交互。flapigen 的前身名为 rust_swig,由于容易与 swig 混淆,因此进行了更名。目前,flapigen 已实现对 C++ 和 Java 的支持,但也允许开发者自行编写对其他语言的支持。
项目功能
flapigen 允许开发者通过简单的代码声明,将 Rust 项目中的功能暴露给其他语言。例如,假设您有如下的 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 项目中添加如下声明:
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 会自动生成 JNI 包装器,用于在 Java 中调用这些 Rust 函数;或者生成 C 兼容的包装器,再通过 C++ 代码来调用这些 C 函数。
自动生成接口文件
如果用户希望自动生成包含 foreign_class!
及相关声明的接口文件,可以使用名为 rifgen 的工具。它提供了一种更为便利的方式来创建和管理这些接口文件。
用户指南
详细的用户指南可为用户提供关于如何将 flapigen 集成到项目中的说明、使用案例和详细的操作步骤,有助于用户更好地利用该工具进行跨语言开发。用户可以参考提供的文档进行学习和实践。