diff options
Diffstat (limited to 'mullvad-management-interface/src')
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 |
