summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-jni/src/from_java.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/mullvad-jni/src/from_java.rs b/mullvad-jni/src/from_java.rs
index 526a83e1fb..11b98ad753 100644
--- a/mullvad-jni/src/from_java.rs
+++ b/mullvad-jni/src/from_java.rs
@@ -1,4 +1,8 @@
-use jni::{objects::JString, JNIEnv};
+use jni::{
+ objects::{JObject, JString},
+ JNIEnv,
+};
+use std::ops::Deref;
pub trait FromJava<'env> {
type JavaType: 'env;
@@ -6,6 +10,22 @@ pub trait FromJava<'env> {
fn from_java(env: &JNIEnv<'env>, source: Self::JavaType) -> Self;
}
+impl<'env, T> FromJava<'env> for Option<T>
+where
+ T: FromJava<'env>,
+ T::JavaType: Deref<Target = JObject<'env>>,
+{
+ type JavaType = T::JavaType;
+
+ fn from_java(env: &JNIEnv<'env>, source: Self::JavaType) -> Self {
+ if source.is_null() {
+ None
+ } else {
+ Some(T::from_java(env, source))
+ }
+ }
+}
+
impl<'env> FromJava<'env> for String {
type JavaType = JString<'env>;