diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-10-01 15:11:14 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-10-01 17:55:13 +0000 |
| commit | d1100512b14489a5fd21bf727f4794ccd786c561 (patch) | |
| tree | 639bb2375c740ad8307531d58f8a2077b1aebb06 | |
| parent | a37db765d22747c12f6c035efc96bea429c2269d (diff) | |
| download | mullvadvpn-d1100512b14489a5fd21bf727f4794ccd786c561.tar.xz mullvadvpn-d1100512b14489a5fd21bf727f4794ccd786c561.zip | |
Implement `IntoJava` for `getAccountData` result
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | mullvad-jni/Cargo.toml | 1 | ||||
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 42 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 4 |
4 files changed, 47 insertions, 1 deletions
diff --git a/Cargo.lock b/Cargo.lock index 0c28150f5f..efa201d429 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1287,6 +1287,7 @@ dependencies = [ "ipnetwork 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", "jni 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-client-core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpc-core 8.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "log-panics 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/mullvad-jni/Cargo.toml b/mullvad-jni/Cargo.toml index ba264c99fa..30b26af6fe 100644 --- a/mullvad-jni/Cargo.toml +++ b/mullvad-jni/Cargo.toml @@ -15,6 +15,7 @@ futures = "0.1" ipnetwork = "0.15" jni = "0.13" jsonrpc-client-core = "0.5" +jsonrpc-core = "8" lazy_static = "1" log = "0.4" log-panics = "2" diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs index ac2e1e73dc..a013f98d30 100644 --- a/mullvad-jni/src/into_java.rs +++ b/mullvad-jni/src/into_java.rs @@ -1,4 +1,4 @@ -use crate::get_class; +use crate::{daemon_interface, get_class}; use ipnetwork::IpNetwork; use jni::{ objects::{JList, JObject, JString, JValue}, @@ -774,3 +774,43 @@ impl<'env> IntoJava<'env> for TunnelState { .expect("Failed to create TunnelState sub-class variant Java object") } } + +impl<'env> IntoJava<'env> for Result<AccountData, daemon_interface::Error> { + type JavaType = JObject<'env>; + + fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { + match self { + Ok(data) => { + let class = get_class("net/mullvad/mullvadvpn/model/GetAccountDataResult$Ok"); + let java_account_data = env.auto_local(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 = 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 2899da982c..312b5b1881 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -51,6 +51,10 @@ const CLASSES_TO_LOAD: &[&str] = &[ "net/mullvad/mullvadvpn/model/Constraint$Only", "net/mullvad/mullvadvpn/model/Endpoint", "net/mullvad/mullvadvpn/model/GeoIpLocation", + "net/mullvad/mullvadvpn/model/GetAccountDataResult$Ok", + "net/mullvad/mullvadvpn/model/GetAccountDataResult$InvalidAccount", + "net/mullvad/mullvadvpn/model/GetAccountDataResult$RpcError", + "net/mullvad/mullvadvpn/model/GetAccountDataResult$OtherError", "net/mullvad/mullvadvpn/model/InetNetwork", "net/mullvad/mullvadvpn/model/KeygenEvent$NewKey", "net/mullvad/mullvadvpn/model/KeygenEvent$Failure", |
