summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-11-22 09:45:02 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-11-22 15:16:56 +0000
commit7b2af16441cf28c534c42474ffcffec2d25d5601 (patch)
tree1d8b7b8d0e626148ae75cacb5f6bf894b5ed212e
parentc6f6e2951b70e12adc97b6bd46bef74b30bfe318 (diff)
downloadmullvadvpn-7b2af16441cf28c534c42474ffcffec2d25d5601.tar.xz
mullvadvpn-7b2af16441cf28c534c42474ffcffec2d25d5601.zip
Create `GetAccountDataResult` helper type
-rw-r--r--mullvad-jni/src/into_java.rs54
-rw-r--r--mullvad-jni/src/lib.rs37
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",
- &parameters,
- )
- .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]