1#![deny(non_upper_case_globals)]
5#![deny(non_camel_case_types)]
6#![deny(non_snake_case)]
7#![deny(unused_mut)]
8#![deny(dead_code)]
9#![deny(unused_imports)]
10#![allow(clippy::missing_safety_doc)]
12
13#[macro_use]
14extern crate log;
15
16mod exception;
17
18use ergo_lib_c_core::address::{address_delete, address_from_testnet, AddressPtr};
19use exception::unwrap_exc_or;
20use jni::{
21 objects::{JClass, JString},
22 sys::jlong,
23 JNIEnv,
24};
25use std::{panic, ptr::null_mut};
26
27#[no_mangle]
28pub unsafe extern "system" fn Java_org_ergoplatform_wallet_jni_WalletLib_addressFromTestNet(
29 env: JNIEnv,
30 _: JClass,
31 address_str: JString,
32) -> jlong {
33 let res = panic::catch_unwind(|| {
34 let address_str_j = env
35 .get_string(address_str)
36 .expect("Couldn't get address String");
37
38 let mut address: AddressPtr = null_mut();
39 let result = address_from_testnet(&address_str_j.to_string_lossy(), &mut address);
40
41 if let Some(error) = result.err() {
42 let _ = env.throw(error.to_string());
43 Ok(0)
44 } else {
45 Ok(address as jlong)
46 }
47 });
48 unwrap_exc_or(&env, res, 0)
49}
50
51#[no_mangle]
52pub unsafe extern "system" fn Java_org_ergoplatform_wallet_jni_WalletLib_addressDelete(
53 _: JNIEnv,
54 _: JClass,
55 address: jlong,
56) {
57 let address_ptr: AddressPtr = address as AddressPtr;
58 if !address_ptr.is_null() {
59 address_delete(address_ptr);
60 }
61}