From 1389f71c97133a72a56ba78be0f23a32bf721445 Mon Sep 17 00:00:00 2001 From: alemi Date: Tue, 24 Sep 2024 03:26:24 +0200 Subject: [PATCH] feat: auto into java object for JNI types --- src/into_java.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/into_java.rs b/src/into_java.rs index 5860da6..9b7c42a 100644 --- a/src/into_java.rs +++ b/src/into_java.rs @@ -56,6 +56,36 @@ pub trait IntoJavaObject<'j> { fn into_java_object(self, env: &mut jni::JNIEnv<'j>) -> Result, jni::errors::Error>; } +impl<'j> IntoJavaObject<'j> for JObject<'j> { + const CLASS: &'static str = "java/lang/Object"; + fn into_java_object(self, _: &mut jni::JNIEnv<'j>) -> Result, jni::errors::Error> { + Ok(self) + } +} + +macro_rules! auto_into_java_object { + ($t:ty, $cls:literal) => { + impl<'j> IntoJavaObject<'j> for $t { + const CLASS: &'static str = $cls; + fn into_java_object(self, _: &mut jni::JNIEnv<'j>) -> Result, jni::errors::Error> { + Ok(self.into()) + } + } + }; +} + +auto_into_java_object!(jni::objects::JString<'j>, "java/lang/String"); +//auto_into_java_object!(jni::objects::JObjectArray<'j>, "java/lang/Object[]"); +//auto_into_java_object!(jni::objects::JIntArray<'j>, "java/lang/Integer[]"); +//auto_into_java_object!(jni::objects::JLongArray<'j>, "java/lang/Long[]"); +//auto_into_java_object!(jni::objects::JShortArray<'j>, "java/lang/Short[]"); +//auto_into_java_object!(jni::objects::JByteArray<'j>, "java/lang/Byte[]"); +//auto_into_java_object!(jni::objects::JCharArray<'j>, "java/lang/Char[]"); +//auto_into_java_object!(jni::objects::JFloatArray<'j>, "java/lang/Float[]"); +//auto_into_java_object!(jni::objects::JDoubleArray<'j>, "java/lang/Double[]"); +//auto_into_java_object!(jni::objects::JBooleanArray<'j>, "java/lang/Boolean[]"); + + impl<'j> IntoJavaObject<'j> for &str { const CLASS: &'static str = "java/lang/String"; fn into_java_object(self, env: &mut jni::JNIEnv<'j>) -> Result, jni::errors::Error> {