diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-22 14:17:37 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-22 21:18:39 +0000 |
| commit | 0f30db4f56f65cb9b18fa0661f2a871bc316228c (patch) | |
| tree | 1f1f68fd44b2347750c5220aeafa85fbaf3c7e3f | |
| parent | 777d3a25922cf8df6b3a26a0ae23f47cb2bf15c2 (diff) | |
| download | mullvadvpn-0f30db4f56f65cb9b18fa0661f2a871bc316228c.tar.xz mullvadvpn-0f30db4f56f65cb9b18fa0661f2a871bc316228c.zip | |
Implement `IntoJava` for relay list types
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 78 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 4 |
2 files changed, 81 insertions, 1 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs index 471ff22c3d..22b582bc1b 100644 --- a/mullvad-jni/src/into_java.rs +++ b/mullvad-jni/src/into_java.rs @@ -4,7 +4,11 @@ use jni::{ sys::jint, JNIEnv, }; -use mullvad_types::{account::AccountData, settings::Settings}; +use mullvad_types::{ + account::AccountData, + relay_list::{Relay, RelayList, RelayListCity, RelayListCountry}, + settings::Settings, +}; pub trait IntoJava<'env> { type JavaType; @@ -78,6 +82,78 @@ impl<'env> IntoJava<'env> for AccountData { } } +impl<'env> IntoJava<'env> for RelayList { + type JavaType = JObject<'env>; + + fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { + let class = get_class("net/mullvad/mullvadvpn/model/RelayList"); + let relay_countries = env.auto_local(self.countries.into_java(env)); + let parameters = [JValue::Object(relay_countries.as_obj())]; + + env.new_object(&class, "(Ljava/util/List;)V", ¶meters) + .expect("Failed to create RelayList Java object") + } +} + +impl<'env> IntoJava<'env> for RelayListCountry { + type JavaType = JObject<'env>; + + fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { + let class = get_class("net/mullvad/mullvadvpn/model/RelayListCountry"); + let name = env.auto_local(JObject::from(self.name.into_java(env))); + let code = env.auto_local(JObject::from(self.code.into_java(env))); + let relay_cities = env.auto_local(self.cities.into_java(env)); + let parameters = [ + JValue::Object(name.as_obj()), + JValue::Object(code.as_obj()), + JValue::Object(relay_cities.as_obj()), + ]; + + env.new_object( + &class, + "(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V", + ¶meters, + ) + .expect("Failed to create RelayListCountry Java object") + } +} + +impl<'env> IntoJava<'env> for RelayListCity { + type JavaType = JObject<'env>; + + fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { + let class = get_class("net/mullvad/mullvadvpn/model/RelayListCity"); + let name = env.auto_local(JObject::from(self.name.into_java(env))); + let code = env.auto_local(JObject::from(self.code.into_java(env))); + let relays = env.auto_local(self.relays.into_java(env)); + let parameters = [ + JValue::Object(name.as_obj()), + JValue::Object(code.as_obj()), + JValue::Object(relays.as_obj()), + ]; + + env.new_object( + &class, + "(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V", + ¶meters, + ) + .expect("Failed to create RelayListCity Java object") + } +} + +impl<'env> IntoJava<'env> for Relay { + type JavaType = JObject<'env>; + + fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { + let class = get_class("net/mullvad/mullvadvpn/model/Relay"); + let hostname = env.auto_local(JObject::from(self.hostname.into_java(env))); + let parameters = [JValue::Object(hostname.as_obj())]; + + env.new_object(&class, "(Ljava/lang/String;)V", ¶meters) + .expect("Failed to create Relay Java object") + } +} + impl<'env> IntoJava<'env> for Settings { type JavaType = JObject<'env>; diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 61a0d602bf..9e9f055a6a 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -21,6 +21,10 @@ const LOG_FILENAME: &str = "daemon.log"; const CLASSES_TO_LOAD: &[&str] = &[ "java/util/ArrayList", "net/mullvad/mullvadvpn/model/AccountData", + "net/mullvad/mullvadvpn/model/Relay", + "net/mullvad/mullvadvpn/model/RelayList", + "net/mullvad/mullvadvpn/model/RelayListCity", + "net/mullvad/mullvadvpn/model/RelayListCountry", "net/mullvad/mullvadvpn/model/Settings", ]; |
