diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-21 19:34:24 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-22 19:55:46 +0000 |
| commit | efbec6df289fb0196a0cbea00861170952a18cac (patch) | |
| tree | f0ab2389c172593a6f018e4a1f94ecb96585a263 | |
| parent | 49824945f510afbfca6fda7fde04c2db997ffcac (diff) | |
| download | mullvadvpn-efbec6df289fb0196a0cbea00861170952a18cac.tar.xz mullvadvpn-efbec6df289fb0196a0cbea00861170952a18cac.zip | |
Implement `FromJava` for `Option<T>`
| -rw-r--r-- | mullvad-jni/src/from_java.rs | 22 |
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>; |
