diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-11-22 09:45:02 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-11-22 15:16:56 +0000 |
| commit | 7b2af16441cf28c534c42474ffcffec2d25d5601 (patch) | |
| tree | 1d8b7b8d0e626148ae75cacb5f6bf894b5ed212e | |
| parent | c6f6e2951b70e12adc97b6bd46bef74b30bfe318 (diff) | |
| download | mullvadvpn-7b2af16441cf28c534c42474ffcffec2d25d5601.tar.xz mullvadvpn-7b2af16441cf28c534c42474ffcffec2d25d5601.zip | |
Create `GetAccountDataResult` helper type
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 54 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 37 |
2 files changed, 39 insertions, 52 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs index 20ad7dfcbb..048643b160 100644 --- a/mullvad-jni/src/into_java.rs +++ b/mullvad-jni/src/into_java.rs @@ -1,11 +1,7 @@ -use crate::daemon_interface; -use jnix::{ - jni::objects::{AutoLocal, JValue}, - JnixEnv, -}; +use jnix::{jni::objects::AutoLocal, JnixEnv}; use mullvad_types::{ - account::AccountData, relay_constraints::Constraint, relay_list::RelayList, settings::Settings, - states::TunnelState, version::AppVersionInfo, wireguard::KeygenEvent, + relay_constraints::Constraint, relay_list::RelayList, settings::Settings, states::TunnelState, + version::AppVersionInfo, wireguard::KeygenEvent, }; use std::fmt::Debug; use talpid_core::tunnel::tun_provider::TunConfig; @@ -54,7 +50,6 @@ where } wrap_jnix_into_java!(AppVersionInfo); -wrap_jnix_into_java!(AccountData); wrap_jnix_into_java!(TunConfig); wrap_jnix_into_java!(RelayList); @@ -66,46 +61,3 @@ wrap_jnix_into_java!(Constraint<T> wrap_jnix_into_java!(KeygenEvent); wrap_jnix_into_java!(Settings); wrap_jnix_into_java!(TunnelState); - -impl<'borrow, 'env> IntoJava<'borrow, 'env> for Result<AccountData, daemon_interface::Error> -where - 'env: 'borrow, -{ - type JavaType = AutoLocal<'env, 'borrow>; - - fn into_java(self, env: &'borrow JnixEnv<'env>) -> Self::JavaType { - env.auto_local(match self { - Ok(data) => { - let class = env.get_class("net/mullvad/mullvadvpn/model/GetAccountDataResult$Ok"); - let java_account_data = data.into_java(&env); - let parameters = [JValue::Object(java_account_data.as_obj())]; - - env.new_object( - &class, - "(Lnet/mullvad/mullvadvpn/model/AccountData;)V", - ¶meters, - ) - .expect("Failed to create GetAccountDataResult.Ok Java object") - } - Err(error) => { - let class_name = match error { - daemon_interface::Error::RpcError(jsonrpc_client_core::Error( - jsonrpc_client_core::ErrorKind::JsonRpcError(jsonrpc_core::Error { - code: jsonrpc_core::ErrorCode::ServerError(-200), - .. - }), - _, - )) => "net/mullvad/mullvadvpn/model/GetAccountDataResult$InvalidAccount", - daemon_interface::Error::RpcError(_) => { - "net/mullvad/mullvadvpn/model/GetAccountDataResult$RpcError" - } - _ => "net/mullvad/mullvadvpn/model/GetAccountDataResult$OtherError", - }; - let class = env.get_class(class_name); - - env.new_object(&class, "()V", &[]) - .expect("Failed to create a GetAccountDataResult error sub-class Java object") - } - }) - } -} diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 4e8fc7d03e..d9041aa6c5 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -61,6 +61,41 @@ pub enum Error { StartLogging(#[error(source)] logging::Error), } +mod get_account_data_result { + use crate::daemon_interface; + use jnix::IntoJava; + use mullvad_types::account::AccountData; + + #[derive(IntoJava)] + #[jnix(package = "net.mullvad.mullvadvpn.model")] + pub enum GetAccountDataResult { + Ok(AccountData), + InvalidAccount, + RpcError, + OtherError, + } + + impl From<Result<AccountData, daemon_interface::Error>> for GetAccountDataResult { + fn from(result: Result<AccountData, daemon_interface::Error>) -> Self { + match result { + Ok(account_data) => GetAccountDataResult::Ok(account_data), + Err(error) => match error { + daemon_interface::Error::RpcError(jsonrpc_client_core::Error( + jsonrpc_client_core::ErrorKind::JsonRpcError(jsonrpc_core::Error { + code: jsonrpc_core::ErrorCode::ServerError(-200), + .. + }), + _, + )) => GetAccountDataResult::InvalidAccount, + daemon_interface::Error::RpcError(_) => GetAccountDataResult::RpcError, + _ => GetAccountDataResult::OtherError, + }, + } + } + } +} +use get_account_data_result::GetAccountDataResult; + #[no_mangle] #[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_initialize( @@ -244,7 +279,7 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_getAccountData< ); } - result.into_java(&env).forget() + jnix::IntoJava::into_java(GetAccountDataResult::from(result), &env).forget() } #[no_mangle] |
