summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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>;