summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-01 18:14:02 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-02 22:13:23 +0000
commit8ffc6bdfaab29266baab485817e6258711f28dd4 (patch)
tree3aecccc7de1a77dfb8233e0bc7712bee96ae006d
parent85e10cd5ee07aec1579b89b6bde17dca2483ab22 (diff)
downloadmullvadvpn-8ffc6bdfaab29266baab485817e6258711f28dd4.tar.xz
mullvadvpn-8ffc6bdfaab29266baab485817e6258711f28dd4.zip
Refactor `IntoJava` impl. for `TunnelState`
-rw-r--r--mullvad-jni/src/into_java.rs64
1 files changed, 33 insertions, 31 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs
index 05374cb27f..2fd04c03c7 100644
--- a/mullvad-jni/src/into_java.rs
+++ b/mullvad-jni/src/into_java.rs
@@ -646,42 +646,44 @@ impl<'env> IntoJava<'env> for TunnelState {
type JavaType = JObject<'env>;
fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType {
- let (variant, parameter) = match self {
- TunnelState::Disconnected => ("Disconnected", None),
- TunnelState::Connecting { location, .. } => (
- "Connecting",
- Some((location.into_java(env), "GeoIpLocation")),
- ),
- TunnelState::Connected { location, .. } => (
- "Connected",
- Some((location.into_java(env), "GeoIpLocation")),
- ),
- TunnelState::Disconnecting(action_after_disconnect) => (
- "Disconnecting",
- Some((
- action_after_disconnect.into_java(env),
- "ActionAfterDisconnect",
- )),
- ),
- TunnelState::Blocked(reason) => {
- ("Blocked", Some((reason.into_java(env), "BlockReason")))
+ match self {
+ TunnelState::Disconnected => {
+ let class = get_class("net/mullvad/mullvadvpn/model/TunnelState$Disconnected");
+
+ env.new_object(&class, "()V", &[])
}
- };
+ TunnelState::Connecting { location, .. } => {
+ let class = get_class("net/mullvad/mullvadvpn/model/TunnelState$Connecting");
+ let location = env.auto_local(location.into_java(env));
+ let parameters = [JValue::Object(location.as_obj())];
+ let signature = "(Lnet/mullvad/mullvadvpn/model/GeoIpLocation;)V";
- let class = get_class(&format!(
- "net/mullvad/mullvadvpn/model/TunnelState${}",
- variant
- ));
+ env.new_object(&class, signature, &parameters)
+ }
+ TunnelState::Connected { location, .. } => {
+ let class = get_class("net/mullvad/mullvadvpn/model/TunnelState$Connected");
+ let location = env.auto_local(location.into_java(env));
+ let parameters = [JValue::Object(location.as_obj())];
+ let signature = "(Lnet/mullvad/mullvadvpn/model/GeoIpLocation;)V";
+
+ env.new_object(&class, signature, &parameters)
+ }
+ TunnelState::Disconnecting(action_after_disconnect) => {
+ let class = get_class("net/mullvad/mullvadvpn/model/TunnelState$Disconnecting");
+ let after_disconnect = env.auto_local(action_after_disconnect.into_java(env));
+ let parameters = [JValue::Object(after_disconnect.as_obj())];
+ let signature = "(Lnet/mullvad/mullvadvpn/model/ActionAfterDisconnect;)V";
- match parameter {
- Some((java_object, class_name)) => {
- let parameter = env.auto_local(java_object);
- let parameters = [JValue::Object(parameter.as_obj())];
- let signature = format!("(Lnet/mullvad/mullvadvpn/model/{};)V", class_name);
+ env.new_object(&class, signature, &parameters)
+ }
+ TunnelState::Blocked(block_reason) => {
+ let class = get_class("net/mullvad/mullvadvpn/model/TunnelState$Blocked");
+ let reason = env.auto_local(block_reason.into_java(env));
+ let parameters = [JValue::Object(reason.as_obj())];
+ let signature = "(Lnet/mullvad/mullvadvpn/model/BlockReason;)V";
- env.new_object(&class, &signature, &parameters)
+ env.new_object(&class, signature, &parameters)
}
- None => env.new_object(&class, "()V", &[]),
}
.expect("Failed to create TunnelState sub-class variant Java object")
}