summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt9
-rw-r--r--mullvad-jni/src/lib.rs29
2 files changed, 37 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt
new file mode 100644
index 0000000000..33c57a595a
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/VoucherSubmissionResult.kt
@@ -0,0 +1,9 @@
+package net.mullvad.mullvadvpn.model
+
+sealed class VoucherSubmissionResult {
+ class Ok(val submission: VoucherSubmission) : VoucherSubmissionResult()
+ class InvalidVoucher : VoucherSubmissionResult()
+ class VoucherAlreadyUsed : VoucherSubmissionResult()
+ class RpcError : VoucherSubmissionResult()
+ class OtherError : VoucherSubmissionResult()
+}
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index bedd1fa118..37cf2a16cf 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -18,7 +18,7 @@ use jnix::{
};
use mullvad_daemon::{exception_logging, logging, version, Daemon, DaemonCommandChannel};
use mullvad_rpc::{rest::Error as RestError, StatusCode};
-use mullvad_types::account::AccountData;
+use mullvad_types::account::{AccountData, VoucherSubmission};
use std::{
path::{Path, PathBuf},
ptr,
@@ -75,6 +75,33 @@ impl From<Result<AccountData, daemon_interface::Error>> for GetAccountDataResult
}
}
+#[derive(IntoJava)]
+#[jnix(package = "net.mullvad.mullvadvpn.model")]
+pub enum VoucherSubmissionResult {
+ Ok(VoucherSubmission),
+ InvalidVoucher,
+ VoucherAlreadyUsed,
+ RpcError,
+ OtherError,
+}
+
+impl From<Result<VoucherSubmission, daemon_interface::Error>> for VoucherSubmissionResult {
+ fn from(result: Result<VoucherSubmission, daemon_interface::Error>) -> Self {
+ match result {
+ Ok(submission) => VoucherSubmissionResult::Ok(submission),
+ Err(daemon_interface::Error::RpcError(RestError::ApiError(_, code))) => {
+ match code.as_str() {
+ "INVALID_VOUCHER" => VoucherSubmissionResult::InvalidVoucher,
+ "VOUCHER_USED" => VoucherSubmissionResult::VoucherAlreadyUsed,
+ _ => VoucherSubmissionResult::RpcError,
+ }
+ }
+ Err(daemon_interface::Error::RpcError(_)) => VoucherSubmissionResult::RpcError,
+ _ => VoucherSubmissionResult::OtherError,
+ }
+ }
+}
+
#[no_mangle]
#[allow(non_snake_case)]
pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_initialize(