เครื่องมือสำหรับการเชื่อมต่อโปรแกรมหรือห้องสมุดที่เขียนด้วยสนิมกับภาษาอื่น ๆ เครื่องกำเนิด API ภาษาต่างประเทศ - flapigen ชื่อเดิม Rust_swig ถูกเปลี่ยนเป็นไม่สับสนกับ Swig ปัจจุบันใช้การสนับสนุนสำหรับ C++ และ Java แต่คุณสามารถเขียนการสนับสนุนสำหรับภาษาที่คุณเลือก สำหรับคำแนะนำวิธีการรวมฟลาปเจนเข้ากับโครงการของคุณดูที่นี่
สมมติว่าคุณมีรหัสสนิมต่อไปนี้:
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
}และคุณต้องการเขียนในชวาบางอย่างเช่นนี้:
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 );เพื่อที่จะนำไปใช้ฟลาปเจนแนะนำฟังก์ชั่นต่อไปนี้ในโครงการสนิมที่คุณเขียน (ในภาษาสนิม):
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 ;
} ) ;และนั่นคือทั้งหมดที่ฟลาปเจนสร้าง wrappers JNI สำหรับฟังก์ชั่นสนิมและรหัส Java เพื่อเรียกฟังก์ชั่น JNI เหล่านี้หรือสร้าง wrappers ที่เข้ากันได้ C ในกรณีของรหัส C ++ และ C ++ เพื่อเรียกฟังก์ชั่น C เหล่านี้
หากคุณต้องการไฟล์อินเทอร์เฟซ (ไฟล์ที่มี foreign_class! และอื่น ๆ ) จะถูกสร้างขึ้นโดยอัตโนมัติสำหรับคุณ Checkout Rifgen
อ่านคู่มือผู้ใช้ flapigen ที่นี่!