Add Rust Library

This commit is contained in:
GuilhermeWerner 2021-05-07 08:42:42 -03:00
parent 362bb7f973
commit 1e18dd4cb2
4 changed files with 66 additions and 0 deletions

43
Source/lib.rs Normal file
View file

@ -0,0 +1,43 @@
// Copyright (c) TribuFu. All Rights Reserved
//! Jvm bindings to TribuFu SDK.
#![allow(non_snake_case)]
#![allow(unused_variables)]
#![allow(unused_imports)]
#[cfg(not(any(
target_os = "windows",
target_os = "macos",
target_os = "linux",
target_os = "android",
target_os = "ios",
target_arch = "wasm32",
)))]
compile_error!("INVALID_TARGET_PLATFORM");
use jni::objects::{JClass, JString};
use jni::sys::jstring;
use jni::JNIEnv;
use std::ffi::{CStr, CString};
#[no_mangle]
// This is the class that owns our static method. It's not going to be used,
// but still must be present to match the expected signature of a static
// native method.
pub extern "system" fn Java_tribufu_TribuFu_Hello(
env: JNIEnv,
_: JClass,
j_input: JString,
) -> jstring {
// First, we have to get the string out of Java. Check out the `strings`
// module for more info on how this works.
let input = CString::from(unsafe { CStr::from_ptr(env.get_string(j_input).unwrap().as_ptr()) });
// Then we have to create a new Java string to return. Again, more info
// in the `strings` module.
let res = env.new_string(input.to_str().unwrap()).unwrap();
// Finally, extract the raw pointer to return.
return res.into_inner();
}