#[macro_use] extern crate tracing; use discord_rpc_client::java::*; use jni::objects::{JClass, JObject, JString}; use jni::JNIEnv; // can't just put these in src/java.rs and re-export because of some tree-shaking that the compiler does. #[no_mangle] pub extern "system" fn Java_com_discord_rpc_DiscordRPC_create<'a>( env: JNIEnv<'a>, class: JClass, ) -> JObject<'a> { let _ = tracing_subscriber::fmt::try_init(); match jni_create(env, class) { Ok(obj) => obj, Err(e) => { error!( concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"), e ); JObject::null() } } } #[no_mangle] pub extern "system" fn Java_com_discord_rpc_DiscordRPC_connect( env: JNIEnv, obj: JObject, client_id: JString, ) -> bool { match jni_connect(env, obj, client_id) { Ok(_) => true, Err(e) => { match e.downcast::() { Ok(e) => { if e.kind() == std::io::ErrorKind::NotFound { debug!( concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"), e ); return false; } else { error!( concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"), e ); } } Err(e) => { error!( concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"), e ); } } false } } } #[no_mangle] pub extern "system" fn Java_com_discord_rpc_DiscordRPC_disconnect( env: JNIEnv, obj: JObject, ) -> bool { match jni_disconnect(env, obj) { Ok(_) => true, Err(e) => { error!( concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"), e ); false } } } #[no_mangle] pub extern "system" fn Java_com_discord_rpc_DiscordRPC_setActivity( env: JNIEnv, obj: JObject, j_activity: JObject, ) -> bool { match jni_set_activity(env, obj, j_activity) { Ok(_) => true, Err(e) => { error!( concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"), e ); false } } } #[no_mangle] pub extern "system" fn Java_com_discord_rpc_DiscordRPC_clearActivity( env: JNIEnv, obj: JObject, ) -> bool { match jni_clear_activity(env, obj) { Ok(_) => true, Err(e) => { error!( concat!("at ", file!(), ":", line!(), ":", column!(), ": {}"), e ); false } } }