summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-21 19:34:24 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 19:55:46 +0000
commitefbec6df289fb0196a0cbea00861170952a18cac (patch)
treef0ab2389c172593a6f018e4a1f94ecb96585a263
parent49824945f510afbfca6fda7fde04c2db997ffcac (diff)
downloadmullvadvpn-efbec6df289fb0196a0cbea00861170952a18cac.tar.xz
mullvadvpn-efbec6df289fb0196a0cbea00861170952a18cac.zip
Implement `FromJava` for `Option<T>`
-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>;