Extract java_string_to_rust() utility function

This commit is contained in:
Jack Grigg 2019-02-11 15:44:49 +00:00
parent 1163c557a8
commit 5dfadd4393
No known key found for this signature in database
GPG Key ID: 1B8D649257DB0829
2 changed files with 23 additions and 60 deletions

View File

@ -2,6 +2,7 @@
extern crate log;
mod sql;
mod utils;
const SAPLING_CONSENSUS_BRANCH_ID: u32 = 0x76b8_09bb;
@ -51,10 +52,7 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_initDataDb(
_: JClass<'_>,
db_data: JString<'_>,
) -> jboolean {
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_data = utils::java_string_to_rust(&env, db_data);
match init_data_database(&db_data) {
Ok(()) => JNI_TRUE,
@ -73,10 +71,7 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_initAccountsTab
seed: jbyteArray,
accounts: jint,
) -> jobjectArray {
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_data = utils::java_string_to_rust(&env, db_data);
let seed = env.convert_byte_array(seed).unwrap();
let ret = if accounts >= 0 {
@ -128,10 +123,7 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_initBlocksTable
time: jlong,
sapling_tree: jbyteArray,
) -> jboolean {
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_data = utils::java_string_to_rust(&env, db_data);
let time = if time >= 0 && time <= jlong::from(u32::max_value()) {
time as u32
} else {
@ -156,10 +148,7 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_getAddress(
db_data: JString<'_>,
account: jint,
) -> jstring {
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_data = utils::java_string_to_rust(&env, db_data);
let addr = match account {
acc if acc >= 0 => match get_address(&db_data, acc as u32) {
@ -188,10 +177,7 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_getBalance(
db_data: JString<'_>,
account: jint,
) -> jlong {
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_data = utils::java_string_to_rust(&env, db_data);
let account = if account >= 0 {
account as u32
} else {
@ -215,10 +201,7 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_getReceivedMemo
db_data: JString<'_>,
id_note: jlong,
) -> jstring {
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_data = utils::java_string_to_rust(&env, db_data);
let memo = match crate::sql::get_received_memo_as_utf8(db_data, id_note) {
Ok(memo) => memo.unwrap_or_default(),
@ -240,10 +223,7 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_getSentMemoAsUt
db_data: JString<'_>,
id_note: jlong,
) -> jstring {
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_data = utils::java_string_to_rust(&env, db_data);
let memo = match crate::sql::get_sent_memo_as_utf8(db_data, id_note) {
Ok(memo) => memo.unwrap_or_default(),
@ -265,14 +245,8 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_scanBlocks(
db_cache: JString<'_>,
db_data: JString<'_>,
) -> jboolean {
let db_cache: String = env
.get_string(db_cache)
.expect("Couldn't get Java string!")
.into();
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_cache = utils::java_string_to_rust(&env, db_cache);
let db_data = utils::java_string_to_rust(&env, db_data);
match scan_cached_blocks(&db_cache, &db_data) {
Ok(()) => JNI_TRUE,
@ -296,37 +270,19 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_sendToAddress(
spend_params: JString<'_>,
output_params: JString<'_>,
) -> jlong {
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let db_data = utils::java_string_to_rust(&env, db_data);
let account = if account >= 0 {
account as u32
} else {
error!("account argument must be positive");
return -1;
};
let extsk: String = env
.get_string(extsk)
.expect("Couldn't get Java string!")
.into();
let to: String = env
.get_string(to)
.expect("Couldn't get Java string!")
.into();
let extsk = utils::java_string_to_rust(&env, extsk);
let to = utils::java_string_to_rust(&env, to);
let value = Amount(value);
let memo: String = env
.get_string(memo)
.expect("Couldn't get Java string!")
.into();
let spend_params: String = env
.get_string(spend_params)
.expect("Couldn't get Java string!")
.into();
let output_params: String = env
.get_string(output_params)
.expect("Couldn't get Java string!")
.into();
let memo = utils::java_string_to_rust(&env, memo);
let spend_params = utils::java_string_to_rust(&env, spend_params);
let output_params = utils::java_string_to_rust(&env, output_params);
let extsk = match decode_extended_spending_key(HRP_SAPLING_EXTENDED_SPENDING_KEY_TEST, &extsk) {
Ok(extsk) => extsk,

7
src/main/rust/utils.rs Normal file
View File

@ -0,0 +1,7 @@
use jni::{objects::JString, JNIEnv};
pub(crate) fn java_string_to_rust(env: &JNIEnv<'_>, jstring: JString<'_>) -> String {
env.get_string(jstring)
.expect("Couldn't get Java string!")
.into()
}