summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-10-01 15:11:14 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-10-01 17:55:13 +0000
commitd1100512b14489a5fd21bf727f4794ccd786c561 (patch)
tree639bb2375c740ad8307531d58f8a2077b1aebb06
parenta37db765d22747c12f6c035efc96bea429c2269d (diff)
downloadmullvadvpn-d1100512b14489a5fd21bf727f4794ccd786c561.tar.xz
mullvadvpn-d1100512b14489a5fd21bf727f4794ccd786c561.zip
Implement `IntoJava` for `getAccountData` result
-rw-r--r--Cargo.lock1
-rw-r--r--mullvad-jni/Cargo.toml1
-rw-r--r--mullvad-jni/src/into_java.rs42
-rw-r--r--mullvad-jni/src/lib.rs4
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",
+ &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 = 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",