diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-22 13:46:57 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-22 21:18:39 +0000 |
| commit | 777d3a25922cf8df6b3a26a0ae23f47cb2bf15c2 (patch) | |
| tree | fa75d08341adccdb064b59dc1ee4df27373645f1 | |
| parent | 86acfe9fa717af2a4d60949aa085077add013365 (diff) | |
| download | mullvadvpn-777d3a25922cf8df6b3a26a0ae23f47cb2bf15c2.tar.xz mullvadvpn-777d3a25922cf8df6b3a26a0ae23f47cb2bf15c2.zip | |
Implement `IntoJava` for `Vec<T>`
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 33 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 1 |
2 files changed, 33 insertions, 1 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs index 4f8fc3f287..471ff22c3d 100644 --- a/mullvad-jni/src/into_java.rs +++ b/mullvad-jni/src/into_java.rs @@ -1,6 +1,7 @@ use crate::get_class; use jni::{ - objects::{JObject, JString, JValue}, + objects::{JList, JObject, JString, JValue}, + sys::jint, JNIEnv, }; use mullvad_types::{account::AccountData, settings::Settings}; @@ -34,6 +35,36 @@ impl<'env> IntoJava<'env> for String { } } +impl<'env, T> IntoJava<'env> for Vec<T> +where + T: IntoJava<'env>, + JObject<'env>: From<T::JavaType>, +{ + type JavaType = JObject<'env>; + + fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { + let class = get_class("java/util/ArrayList"); + let initial_capacity = self.len(); + let parameters = [JValue::Int(initial_capacity as jint)]; + + let list_object = env + .new_object(&class, "(I)V", ¶meters) + .expect("Failed to create ArrayList object"); + + let list = + JList::from_env(env, list_object).expect("Failed to create JList from ArrayList"); + + for element in self { + let java_element = env.auto_local(JObject::from(element.into_java(env))); + + list.add(java_element.as_obj()) + .expect("Failed to add element to ArrayList"); + } + + list_object + } +} + impl<'env> IntoJava<'env> for AccountData { type JavaType = JObject<'env>; diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 6195b56b52..61a0d602bf 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -19,6 +19,7 @@ use talpid_types::{tunnel::TunnelStateTransition, ErrorExt}; const LOG_FILENAME: &str = "daemon.log"; const CLASSES_TO_LOAD: &[&str] = &[ + "java/util/ArrayList", "net/mullvad/mullvadvpn/model/AccountData", "net/mullvad/mullvadvpn/model/Settings", ]; |
