summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2025-05-06 08:23:39 +0200
committerMarkus Pettersson <markus.pettersson@mullvad.net>2025-05-06 10:59:40 +0200
commit009e99038dfb4d56d3e28e24cb96981c9a74c32b (patch)
treee44cf7849a78673b9d2a82650952c1efa03d32dc
parent389e5bb700e3d36d7a5e1c0b599bcf100c0bc17f (diff)
downloadmullvadvpn-009e99038dfb4d56d3e28e24cb96981c9a74c32b.tar.xz
mullvadvpn-009e99038dfb4d56d3e28e24cb96981c9a74c32b.zip
Fix lifetime changes in rust 2024
-rw-r--r--mullvad-api/src/device.rs8
-rw-r--r--mullvad-api/src/lib.rs4
-rw-r--r--mullvad-daemon/src/device/service.rs89
3 files changed, 70 insertions, 31 deletions
diff --git a/mullvad-api/src/device.rs b/mullvad-api/src/device.rs
index 770c86a642..fbcb9e899e 100644
--- a/mullvad-api/src/device.rs
+++ b/mullvad-api/src/device.rs
@@ -135,7 +135,7 @@ impl DevicesProxy {
&self,
account: AccountNumber,
id: DeviceId,
- ) -> impl Future<Output = Result<rest::Response<Incoming>, rest::Error>> {
+ ) -> impl Future<Output = Result<rest::Response<Incoming>, rest::Error>> + use<> {
let service = self.handle.service.clone();
let factory = self.handle.factory.clone();
@@ -151,7 +151,7 @@ impl DevicesProxy {
pub fn list_response(
&self,
account: AccountNumber,
- ) -> impl Future<Output = Result<rest::Response<Incoming>, rest::Error>> {
+ ) -> impl Future<Output = Result<rest::Response<Incoming>, rest::Error>> + use<> {
let service = self.handle.service.clone();
let factory = self.handle.factory.clone();
@@ -169,7 +169,7 @@ impl DevicesProxy {
account: AccountNumber,
id: DeviceId,
pubkey: wireguard::PublicKey,
- ) -> impl Future<Output = Result<rest::Response<Incoming>, rest::Error>> {
+ ) -> impl Future<Output = Result<rest::Response<Incoming>, rest::Error>> + use<> {
#[derive(serde::Serialize)]
struct RotateDevicePubkey {
pubkey: wireguard::PublicKey,
@@ -195,7 +195,7 @@ impl DevicesProxy {
&self,
account: AccountNumber,
pubkey: wireguard::PublicKey,
- ) -> impl Future<Output = Result<rest::Response<Incoming>, rest::Error>> {
+ ) -> impl Future<Output = Result<rest::Response<Incoming>, rest::Error>> + use<> {
#[derive(serde::Serialize)]
struct DeviceSubmission {
pubkey: wireguard::PublicKey,
diff --git a/mullvad-api/src/lib.rs b/mullvad-api/src/lib.rs
index 2d068fdf24..fb44b5ba89 100644
--- a/mullvad-api/src/lib.rs
+++ b/mullvad-api/src/lib.rs
@@ -603,7 +603,7 @@ impl AccountsProxy {
pub fn init_play_purchase(
&mut self,
account: AccountNumber,
- ) -> impl Future<Output = Result<PlayPurchasePaymentToken, rest::Error>> {
+ ) -> impl Future<Output = Result<PlayPurchasePaymentToken, rest::Error>> + use<> {
#[derive(serde::Deserialize)]
struct PlayPurchaseInitResponse {
obfuscated_id: String,
@@ -630,7 +630,7 @@ impl AccountsProxy {
&mut self,
account: AccountNumber,
play_purchase: PlayPurchase,
- ) -> impl Future<Output = Result<(), rest::Error>> {
+ ) -> impl Future<Output = Result<(), rest::Error>> + use<> {
let service = self.handle.service.clone();
let factory = self.handle.factory.clone();
diff --git a/mullvad-daemon/src/device/service.rs b/mullvad-daemon/src/device/service.rs
index 3ebecf0483..ff719339ca 100644
--- a/mullvad-daemon/src/device/service.rs
+++ b/mullvad-daemon/src/device/service.rs
@@ -52,8 +52,14 @@ impl DeviceService {
let api_handle = self.api_availability.clone();
let number_copy = account_number.clone();
async move {
+ let factory = move || {
+ let number = number_copy.clone();
+ let pubkey = pubkey.clone();
+
+ proxy.create(number, pubkey)
+ };
let (device, addresses) = retry_future(
- move || proxy.create(number_copy.clone(), pubkey.clone()),
+ factory,
move |result| should_retry(result, &api_handle),
RETRY_ACTION_STRATEGY,
)
@@ -84,13 +90,17 @@ impl DeviceService {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
let number_copy = account_number.clone();
- let (device, addresses) = retry_future(
- move || api_handle.when_online(proxy.create(number_copy.clone(), pubkey.clone())),
- should_retry_backoff,
- RETRY_BACKOFF_STRATEGY,
- )
- .await
- .map_err(map_rest_error)?;
+ let factory = move || {
+ let number = number_copy.clone();
+ let pubkey = pubkey.clone();
+ let task = proxy.create(number, pubkey);
+
+ api_handle.when_online(task)
+ };
+ let (device, addresses) =
+ retry_future(factory, should_retry_backoff, RETRY_BACKOFF_STRATEGY)
+ .await
+ .map_err(map_rest_error)?;
Ok(PrivateAccountAndDevice {
account_number,
@@ -163,8 +173,15 @@ impl DeviceService {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
let pubkey = private_key.public_key();
+ let factory = move || {
+ let number = number.clone();
+ let device = device.clone();
+ let pubkey = pubkey.clone();
+
+ proxy.replace_wg_key(number, device, pubkey)
+ };
let addresses = retry_future(
- move || proxy.replace_wg_key(number.clone(), device.clone(), pubkey.clone()),
+ factory,
move |result| should_retry(result, &api_handle),
RETRY_ACTION_STRATEGY,
)
@@ -193,11 +210,8 @@ impl DeviceService {
let addresses = retry_future(
move || {
- api_handle.when_bg_resumes(proxy.replace_wg_key(
- number.clone(),
- device.clone(),
- pubkey.clone(),
- ))
+ let task = proxy.replace_wg_key(number.clone(), device.clone(), pubkey.clone());
+ api_handle.when_bg_resumes(task)
},
should_retry_backoff,
rotate_retry_strategy,
@@ -215,8 +229,12 @@ impl DeviceService {
pub async fn list_devices(&self, number: AccountNumber) -> Result<Vec<Device>, Error> {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
+ let factory = move || {
+ let number = number.clone();
+ proxy.list(number)
+ };
retry_future(
- move || proxy.list(number.clone()),
+ factory,
move |result| should_retry(result, &api_handle),
RETRY_ACTION_STRATEGY,
)
@@ -231,20 +249,30 @@ impl DeviceService {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
- retry_future(
- move || api_handle.when_online(proxy.list(number.clone())),
- should_retry_backoff,
- RETRY_BACKOFF_STRATEGY,
- )
- .await
- .map_err(map_rest_error)
+ let factory = move || {
+ let number = number.clone();
+ let task = proxy.list(number);
+
+ api_handle.when_online(task)
+ };
+ retry_future(factory, should_retry_backoff, RETRY_BACKOFF_STRATEGY)
+ .await
+ .map_err(map_rest_error)
}
pub async fn get(&self, number: AccountNumber, device: DeviceId) -> Result<Device, Error> {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
+ let number = number.clone();
+ let device = device.clone();
+ let factory = move || {
+ let number = number.clone();
+ let device = device.clone();
+
+ proxy.get(number, device)
+ };
retry_future(
- move || proxy.get(number.clone(), device.clone()),
+ factory,
move |result| should_retry(result, &api_handle),
RETRY_ACTION_STRATEGY,
)
@@ -332,8 +360,13 @@ impl AccountService {
) -> Result<PlayPurchasePaymentToken, Error> {
let mut proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
+ let factory = move || {
+ let account_number = account_number.clone();
+
+ proxy.init_play_purchase(account_number)
+ };
let result = retry_future(
- move || proxy.init_play_purchase(account_number.clone()),
+ factory,
move |result| should_retry(result, &api_handle),
RETRY_ACTION_STRATEGY,
)
@@ -353,8 +386,14 @@ impl AccountService {
) -> Result<(), Error> {
let mut proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
+ let factory = move || {
+ let account_number = account_number.clone();
+ let play_purchase = play_purchase.clone();
+
+ proxy.verify_play_purchase(account_number, play_purchase)
+ };
let result = retry_future(
- move || proxy.verify_play_purchase(account_number.clone(), play_purchase.clone()),
+ factory,
move |result| should_retry(result, &api_handle),
RETRY_ACTION_STRATEGY,
)