summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-management-interface/src/types.rs51
1 files changed, 50 insertions, 1 deletions
diff --git a/mullvad-management-interface/src/types.rs b/mullvad-management-interface/src/types.rs
index 0f70d11a91..8b259e0722 100644
--- a/mullvad-management-interface/src/types.rs
+++ b/mullvad-management-interface/src/types.rs
@@ -1,7 +1,11 @@
pub use prost_types::{Duration, Timestamp};
use mullvad_types::relay_constraints::Constraint;
-use std::convert::TryFrom;
+use std::{
+ convert::TryFrom,
+ net::{Ipv4Addr, Ipv6Addr},
+ str::FromStr,
+};
use talpid_types::{net::wireguard, ErrorExt};
#[allow(clippy::derive_partial_eq_without_eq)]
@@ -29,6 +33,51 @@ impl From<mullvad_types::location::GeoIpLocation> for GeoIpLocation {
}
}
+impl TryFrom<GeoIpLocation> for mullvad_types::location::GeoIpLocation {
+ type Error = FromProtobufTypeError;
+
+ fn try_from(geoip: GeoIpLocation) -> Result<Self, Self::Error> {
+ Ok(mullvad_types::location::GeoIpLocation {
+ ipv4: match geoip.ipv4 {
+ addr if addr.is_empty() => None,
+ addr => Some(Ipv4Addr::from_str(&addr).map_err(|_err| {
+ FromProtobufTypeError::InvalidArgument("invalid IPv4 address")
+ })?),
+ },
+ ipv6: match geoip.ipv6 {
+ addr if addr.is_empty() => None,
+ addr => Some(Ipv6Addr::from_str(&addr).map_err(|_err| {
+ FromProtobufTypeError::InvalidArgument("invalid IPv6 address")
+ })?),
+ },
+ country: geoip.country,
+ city: match geoip.city {
+ city if city.is_empty() => None,
+ city => Some(city),
+ },
+ latitude: geoip.latitude,
+ longitude: geoip.longitude,
+ mullvad_exit_ip: geoip.mullvad_exit_ip,
+ hostname: match geoip.hostname {
+ host if host.is_empty() => None,
+ host => Some(host),
+ },
+ bridge_hostname: match geoip.bridge_hostname {
+ host if host.is_empty() => None,
+ host => Some(host),
+ },
+ entry_hostname: match geoip.entry_hostname {
+ host if host.is_empty() => None,
+ host => Some(host),
+ },
+ obfuscator_hostname: match geoip.obfuscator_hostname {
+ host if host.is_empty() => None,
+ host => Some(host),
+ },
+ })
+ }
+}
+
impl From<talpid_types::net::TunnelEndpoint> for TunnelEndpoint {
fn from(endpoint: talpid_types::net::TunnelEndpoint) -> Self {
use talpid_types::net;