diff options
| -rw-r--r-- | mullvad-daemon/src/relays.rs | 10 | ||||
| -rw-r--r-- | mullvad-types/src/relay_list.rs | 12 |
2 files changed, 18 insertions, 4 deletions
diff --git a/mullvad-daemon/src/relays.rs b/mullvad-daemon/src/relays.rs index 86d4efbc51..45aabcba1d 100644 --- a/mullvad-daemon/src/relays.rs +++ b/mullvad-daemon/src/relays.rs @@ -70,8 +70,9 @@ impl ParsedRelays { let city_code = city.code.clone(); let latitude = city.latitude; let longitude = city.longitude; - relays.extend(city.relays.drain(..).map(|mut relay| { - relay.location = Some(Location { + for relay in &mut city.relays { + let mut relay_with_location = relay.clone(); + relay_with_location.location = Some(Location { country: country_name.clone(), country_code: country_code.clone(), city: city_name.clone(), @@ -79,8 +80,9 @@ impl ParsedRelays { latitude, longitude, }); - relay - })); + relays.push(relay_with_location); + relay.tunnels.clear(); + } } } ParsedRelays { diff --git a/mullvad-types/src/relay_list.rs b/mullvad-types/src/relay_list.rs index 17d6e7d5f2..402b4f220b 100644 --- a/mullvad-types/src/relay_list.rs +++ b/mullvad-types/src/relay_list.rs @@ -44,6 +44,7 @@ pub struct Relay { pub ipv4_addr_exit: Ipv4Addr, pub include_in_country: bool, pub weight: u64, + #[serde(skip_serializing_if = "RelayTunnels::is_empty", default)] pub tunnels: RelayTunnels, #[serde(skip)] pub location: Option<Location>, @@ -55,3 +56,14 @@ pub struct RelayTunnels { pub openvpn: Vec<OpenVpnEndpointData>, pub wireguard: Vec<WireguardEndpointData>, } + +impl RelayTunnels { + pub fn is_empty(&self) -> bool { + self.openvpn.is_empty() && self.wireguard.is_empty() + } + + pub fn clear(&mut self) { + self.openvpn.clear(); + self.wireguard.clear(); + } +} |
