diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-01 18:14:02 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-08-02 22:13:23 +0000 |
| commit | 8ffc6bdfaab29266baab485817e6258711f28dd4 (patch) | |
| tree | 3aecccc7de1a77dfb8233e0bc7712bee96ae006d | |
| parent | 85e10cd5ee07aec1579b89b6bde17dca2483ab22 (diff) | |
| download | mullvadvpn-8ffc6bdfaab29266baab485817e6258711f28dd4.tar.xz mullvadvpn-8ffc6bdfaab29266baab485817e6258711f28dd4.zip | |
Refactor `IntoJava` impl. for `TunnelState`
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 64 |
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, ¶meters) + } + 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, ¶meters) + } + 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, ¶meters) + } + 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, ¶meters) + env.new_object(&class, signature, ¶meters) } - None => env.new_object(&class, "()V", &[]), } .expect("Failed to create TunnelState sub-class variant Java object") } |
