summaryrefslogtreecommitdiffhomepage
path: root/mullvad-management-interface/src
diff options
context:
space:
mode:
Diffstat (limited to 'mullvad-management-interface/src')
-rw-r--r--mullvad-management-interface/src/client.rs17
-rw-r--r--mullvad-management-interface/src/types/conversions/access_method.rs52
-rw-r--r--mullvad-management-interface/src/types/conversions/settings.rs2
3 files changed, 43 insertions, 28 deletions
diff --git a/mullvad-management-interface/src/client.rs b/mullvad-management-interface/src/client.rs
index 52dbd72b47..f30b613171 100644
--- a/mullvad-management-interface/src/client.rs
+++ b/mullvad-management-interface/src/client.rs
@@ -176,19 +176,20 @@ impl MullvadProxyClient {
}
pub async fn get_api_access_methods(&mut self) -> Result<Vec<AccessMethodSetting>> {
- self.0
+ let access_method_settings = self
+ .0
.get_settings(())
.await
.map_err(Error::Rpc)?
.into_inner()
.api_access_methods
- .ok_or(Error::ApiAccessMethodSettingsNotFound)?
- .access_method_settings
- .into_iter()
- .map(|api_access_method| {
- AccessMethodSetting::try_from(api_access_method).map_err(Error::InvalidResponse)
- })
- .collect()
+ .ok_or(Error::ApiAccessMethodSettingsNotFound)
+ .and_then(|access_method_settings| {
+ access_method::Settings::try_from(access_method_settings)
+ .map_err(Error::InvalidResponse)
+ })?;
+
+ Ok(access_method_settings.iter().cloned().collect())
}
pub async fn get_api_access_method(
diff --git a/mullvad-management-interface/src/types/conversions/access_method.rs b/mullvad-management-interface/src/types/conversions/access_method.rs
index ec5681d74d..d9758a571c 100644
--- a/mullvad-management-interface/src/types/conversions/access_method.rs
+++ b/mullvad-management-interface/src/types/conversions/access_method.rs
@@ -5,35 +5,49 @@ mod settings {
use crate::types::{proto, FromProtobufTypeError};
use mullvad_types::access_method;
- impl From<&access_method::Settings> for proto::ApiAccessMethodSettings {
- fn from(settings: &access_method::Settings) -> Self {
+ impl From<access_method::Settings> for proto::ApiAccessMethodSettings {
+ fn from(settings: access_method::Settings) -> Self {
Self {
- access_method_settings: settings
- .access_method_settings
- .iter()
- .map(|method| method.clone().into())
+ direct: Some(settings.direct().clone().into()),
+ mullvad_bridges: Some(settings.mullvad_bridges().clone().into()),
+ custom: settings
+ .iter_custom()
+ .cloned()
+ .map(|method| method.into())
.collect(),
}
}
}
- impl From<access_method::Settings> for proto::ApiAccessMethodSettings {
- fn from(settings: access_method::Settings) -> Self {
- proto::ApiAccessMethodSettings::from(&settings)
- }
- }
-
impl TryFrom<proto::ApiAccessMethodSettings> for access_method::Settings {
type Error = FromProtobufTypeError;
fn try_from(settings: proto::ApiAccessMethodSettings) -> Result<Self, Self::Error> {
- Ok(Self {
- access_method_settings: settings
- .access_method_settings
- .iter()
- .map(access_method::AccessMethodSetting::try_from)
- .collect::<Result<Vec<access_method::AccessMethodSetting>, _>>()?,
- })
+ let direct = settings
+ .direct
+ .ok_or(FromProtobufTypeError::InvalidArgument(
+ "Could not deserialize Direct Access Method from protobuf",
+ ))
+ .and_then(access_method::AccessMethodSetting::try_from)?;
+
+ let mullvad_bridges = settings
+ .mullvad_bridges
+ .ok_or(FromProtobufTypeError::InvalidArgument(
+ "Could not deserialize Mullvad Bridges Access Method from protobuf",
+ ))
+ .and_then(access_method::AccessMethodSetting::try_from)?;
+
+ let custom = settings
+ .custom
+ .iter()
+ .map(access_method::AccessMethodSetting::try_from)
+ .collect::<Result<Vec<_>, _>>()?;
+
+ Ok(access_method::Settings::new(
+ direct,
+ mullvad_bridges,
+ custom,
+ ))
}
}
}
diff --git a/mullvad-management-interface/src/types/conversions/settings.rs b/mullvad-management-interface/src/types/conversions/settings.rs
index a7c4bcd78c..a4d6313158 100644
--- a/mullvad-management-interface/src/types/conversions/settings.rs
+++ b/mullvad-management-interface/src/types/conversions/settings.rs
@@ -43,7 +43,7 @@ impl From<&mullvad_types::settings::Settings> for proto::Settings {
settings.custom_lists.clone(),
)),
api_access_methods: Some(proto::ApiAccessMethodSettings::from(
- &settings.api_access_methods,
+ settings.api_access_methods.clone(),
)),
relay_overrides: settings
.relay_overrides