feat(rustadapter): using rifgen and flapigen-rs to generate interface

This commit is contained in:
Matthieu Bessat 2024-02-05 10:28:56 +01:00
parent 69b9f018b7
commit e292058b5c
15 changed files with 1724 additions and 30 deletions

59
rust-adapter/src/_old.rs Normal file
View file

@ -0,0 +1,59 @@
#[no_mangle]
pub extern "system" fn Java_net_mbess_popequer_Native_add(
_env: JNIEnv,
_class: JClass,
a: i32,
b: i32
) -> i32 {
a + b
}
#[no_mangle]
pub extern "system" fn Java_net_mbess_popequer_Native_mul(
_env: JNIEnv,
_class: JClass,
a: i32,
b: i32
) -> i32 {
a * b
}
#[no_mangle]
pub extern "system" fn Java_net_mbess_popequer_Native_fsInfo<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
jinput: JString
) -> jstring {
let input: String = env.get_string(&jinput).unwrap().into();
let paths = std::fs::read_dir(format!("/{}", input));
dbg!(&input);
let mut out = String::from("");
for path in paths.unwrap() {
out.push_str(&format!("{:?}\n", path.unwrap().path()))
}
let output = env.new_string(format!("FS test {:?}", out))
.expect("Couldn't create java string!");
output.into_raw()
}
#[no_mangle]
pub extern "system" fn Java_net_mbess_popequer_Native_entryPoint<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
jinput: JString
) -> jstring {
let input: String = env.get_string(&jinput).unwrap().into();
let paths = std::fs::read_dir(format!("/{}", input));
dbg!(&input);
let mut out = String::from("");
for path in paths.unwrap() {
out.push_str(&format!("{:?}\n", path.unwrap().path()))
}
let output = env.new_string(format!("FS test {:?}", out))
.expect("Couldn't create java string!");
output.into_raw()
}

View file

@ -0,0 +1,15 @@
#![allow(
clippy::enum_variant_names,
clippy::unused_unit,
clippy::let_and_return,
clippy::not_unsafe_ptr_arg_deref,
clippy::cast_lossless,
clippy::blacklisted_name,
clippy::too_many_arguments,
clippy::trivially_copy_pass_by_ref,
clippy::let_unit_value,
clippy::clone_on_copy
)]
include!(concat!(env!("OUT_DIR"), "/java_glue.rs"));

33
rust-adapter/src/lib.rs Normal file
View file

@ -0,0 +1,33 @@
mod java_glue;
pub use crate::java_glue::*;
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
}
#[generate_interface]
fn get_data(&self) -> i32 {
self.data
}
///Custom doc comment
#[generate_interface]
fn set_field(&mut self, v: i32) {
self.data = v;
}
}