diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-23 11:08:50 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-23 12:43:29 +0000 |
| commit | 62dedad78d1e88c7a57c493a106964fc75b1900c (patch) | |
| tree | ff7515b59ade7daa3d8b02a817249e5815aa44ff | |
| parent | 11a1a03e4d4004038a4b159fc7fe79e8f585b9c6 (diff) | |
| download | mullvadvpn-62dedad78d1e88c7a57c493a106964fc75b1900c.tar.xz mullvadvpn-62dedad78d1e88c7a57c493a106964fc75b1900c.zip | |
Implement `IntoJava` for `Constraint<T>`
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs index b67d7383e8..d51d74ba87 100644 --- a/mullvad-jni/src/into_java.rs +++ b/mullvad-jni/src/into_java.rs @@ -6,10 +6,11 @@ use jni::{ }; use mullvad_types::{ account::AccountData, - relay_constraints::LocationConstraint, + relay_constraints::{Constraint, LocationConstraint}, relay_list::{Relay, RelayList, RelayListCity, RelayListCountry}, settings::Settings, }; +use std::fmt::Debug; pub trait IntoJava<'env> { type JavaType; @@ -155,6 +156,33 @@ impl<'env> IntoJava<'env> for Relay { } } +impl<'env, T> IntoJava<'env> for Constraint<T> +where + T: Clone + Eq + Debug + IntoJava<'env>, + JObject<'env>: From<T::JavaType>, +{ + type JavaType = JObject<'env>; + + fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { + match self { + Constraint::Any => { + let class = get_class("net/mullvad/mullvadvpn/model/Constraint$Any"); + + env.new_object(&class, "()V", &[]) + .expect("Failed to create Constraint.Any Java object") + } + Constraint::Only(constraint) => { + let class = get_class("net/mullvad/mullvadvpn/model/Constraint$Only"); + let value = env.auto_local(JObject::from(constraint.into_java(env))); + let parameters = [JValue::Object(value.as_obj())]; + + env.new_object(&class, "(Ljava/lang/Object;)V", ¶meters) + .expect("Failed to create Constraint.Only Java object") + } + } + } +} + impl<'env> IntoJava<'env> for LocationConstraint { type JavaType = JObject<'env>; |
