summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-23 11:08:50 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-23 12:43:29 +0000
commit62dedad78d1e88c7a57c493a106964fc75b1900c (patch)
treeff7515b59ade7daa3d8b02a817249e5815aa44ff
parent11a1a03e4d4004038a4b159fc7fe79e8f585b9c6 (diff)
downloadmullvadvpn-62dedad78d1e88c7a57c493a106964fc75b1900c.tar.xz
mullvadvpn-62dedad78d1e88c7a57c493a106964fc75b1900c.zip
Implement `IntoJava` for `Constraint<T>`
-rw-r--r--mullvad-jni/src/into_java.rs30
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", &parameters)
+ .expect("Failed to create Constraint.Only Java object")
+ }
+ }
+ }
+}
+
impl<'env> IntoJava<'env> for LocationConstraint {
type JavaType = JObject<'env>;