mirror of
https://github.com/hexedtech/jni-toolbox.git
synced 2024-11-22 07:24:53 +01:00
docs: added README
This commit is contained in:
parent
62786827d2
commit
1f0bb05ab0
1 changed files with 50 additions and 0 deletions
50
README.md
Normal file
50
README.md
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# jni-macro
|
||||||
|
this is a simple procedural macro crate to automatically generate JNI-compatible extern functions
|
||||||
|
|
||||||
|
it also wraps functions returning `Result<>`, making short-circuiting easy
|
||||||
|
|
||||||
|
## usage
|
||||||
|
just annotate your functions with
|
||||||
|
|
||||||
|
```rust
|
||||||
|
#[jni_macro::jni(package = "your.package.path", class = "ContainerClass")]
|
||||||
|
fn your_function_name(arg: i32) -> Result<(), String> {
|
||||||
|
// your code here
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
by specifying package and class, this crate will write an appropriate wrapper with the right function name. If inner function returns a `Result<>`, wrapper will also handle it. (currently just panics, soon will throw exceptions!)
|
||||||
|
|
||||||
|
## examples
|
||||||
|
the following function:
|
||||||
|
```rust
|
||||||
|
#[java_easy_jni::jni(package = "mp.code", class = "Client")]
|
||||||
|
fn connect(env: JNIEnv, cacca: JString) -> Result<(), ConnectionError> {
|
||||||
|
let config = codemp::api::Config::new("asd".into(), "dsa".into());
|
||||||
|
tokio().block_on(codemp::Client::connect(config))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
gets turned into this couple of functions:
|
||||||
|
```rust
|
||||||
|
fn connect(env: JNIEnv, host: JString) -> Result<(), ConnectionError> {
|
||||||
|
let config = codemp::api::Config::new("mail@example.net".into(), "dont-use-this-password".into());
|
||||||
|
tokio::runtime::current().block_on(codemp::Client::connect(config))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "system" fn Java_mp_code_Client_connect<'local>(env: JNIEnv, host: JString) -> () {
|
||||||
|
match connect(env, cacca) {
|
||||||
|
Ok(x) => x,
|
||||||
|
Err(e) => {
|
||||||
|
$crate::panicking::panic_fmt($crate::const_format_args!("error in JNI!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## status
|
||||||
|
this crate is rather early and intended mostly to maintain [`codemp`](https://github.com/hexedtech/codemp) java bindings, however it's also quite small and only runs at comptime, so should be rather safe to use
|
Loading…
Reference in a new issue