diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-10-23 19:59:08 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-10-24 12:41:10 +0200 |
| commit | fcb7ec89b43b52576cd25474fbc0fd82cd2262c4 (patch) | |
| tree | f6124d803c7eb74802bb6b477910a2d0638a4f1a /mullvad-daemon/src | |
| parent | a8bd2862bd9c6b228bad8a04f2d30ae38d3dad9d (diff) | |
| download | mullvadvpn-fcb7ec89b43b52576cd25474fbc0fd82cd2262c4.tar.xz mullvadvpn-fcb7ec89b43b52576cd25474fbc0fd82cd2262c4.zip | |
Remove 'ResponseFailure' device error variant
Diffstat (limited to 'mullvad-daemon/src')
| -rw-r--r-- | mullvad-daemon/src/device/mod.rs | 69 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 1 |
2 files changed, 26 insertions, 44 deletions
diff --git a/mullvad-daemon/src/device/mod.rs b/mullvad-daemon/src/device/mod.rs index df5606a143..a73d77cbf6 100644 --- a/mullvad-daemon/src/device/mod.rs +++ b/mullvad-daemon/src/device/mod.rs @@ -48,7 +48,7 @@ const LOGOUT_TIMEOUT: Duration = Duration::from_secs(2); /// to set up a WireGuard tunnel. const WG_DEVICE_CHECK_THRESHOLD: usize = 2; -#[derive(err_derive::Error, Debug)] +#[derive(err_derive::Error, Debug, Clone)] pub enum Error { #[error(display = "The account already has a maximum number of devices")] MaxDevicesReached, @@ -63,22 +63,32 @@ pub enum Error { #[error(display = "The voucher has already been used")] UsedVoucher, #[error(display = "Failed to read or write device cache")] - DeviceIoError(#[error(source)] io::Error), + DeviceIoError(#[error(source)] Arc<io::Error>), #[error(display = "Failed parse device cache")] - ParseDeviceCache(#[error(source)] serde_json::Error), + ParseDeviceCache(#[error(source)] Arc<serde_json::Error>), #[error(display = "Unexpected HTTP request error")] OtherRestError(#[error(source)] rest::Error), #[error(display = "The device update task is not running")] Cancelled, - /// Intended to be broadcast to requesters - #[error(display = "Broadcast error")] - ResponseFailure(#[error(source)] Arc<Error>), #[error(display = "Account changed during operation")] AccountChange, #[error(display = "The account manager is down")] AccountManagerDown, } +macro_rules! impl_into_arc_err { + ($ty:ty) => { + impl From<$ty> for Error { + fn from(error: $ty) -> Self { + Error::from(Arc::from(error)) + } + } + }; +} + +impl_into_arc_err!(io::Error); +impl_into_arc_err!(serde_json::Error); + /// Contains the current device state. #[derive(Debug, Clone, serde::Deserialize, serde::Serialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")] @@ -272,27 +282,11 @@ impl PrivateDeviceEvent { impl Error { pub fn is_network_error(&self) -> bool { - if let Error::OtherRestError(error) = self.unpack() { - error.is_network_error() - } else { - false - } + matches!(self, Error::OtherRestError(error) if error.is_network_error()) } pub fn is_aborted(&self) -> bool { - if let Error::OtherRestError(error) = self.unpack() { - error.is_aborted() - } else { - false - } - } - - pub fn unpack(&self) -> &Error { - if let Error::ResponseFailure(ref inner) = self { - inner - } else { - self - } + matches!(self, Error::OtherRestError(error) if error.is_aborted()) } } @@ -787,10 +781,7 @@ impl AccountManager { } Err(err) => { log::error!("Failed to check account expiry: {}", err); - let cloneable_err = Arc::new(err); - Self::drain_requests(&mut self.expiry_requests, || { - Err(Error::ResponseFailure(cloneable_err.clone())) - }); + Self::drain_requests(&mut self.expiry_requests, || Err(err.clone())); } } } @@ -827,10 +818,10 @@ impl AccountManager { } Err(err) => { log::error!("Failed to save device data to disk"); - let cloneable_err = Arc::new(err); - Self::drain_requests(&mut self.validation_requests, || { - Err(Error::ResponseFailure(cloneable_err.clone())) - }); + Self::drain_requests( + &mut self.validation_requests, + || Err(err.clone()), + ); } } } else { @@ -845,10 +836,7 @@ impl AccountManager { } Err(err) => { log::error!("Failed to validate device: {}", err); - let cloneable_err = Arc::new(err); - Self::drain_requests(&mut self.validation_requests, || { - Err(Error::ResponseFailure(cloneable_err.clone())) - }); + Self::drain_requests(&mut self.validation_requests, || Err(err.clone())); } } @@ -936,13 +924,8 @@ impl AccountManager { } fn drain_device_requests_with_err(&mut self, err: Error) { - let cloneable_err = Arc::new(err); - Self::drain_requests(&mut self.rotation_requests, || { - Err(Error::ResponseFailure(cloneable_err.clone())) - }); - Self::drain_requests(&mut self.validation_requests, || { - Err(Error::ResponseFailure(cloneable_err.clone())) - }); + Self::drain_requests(&mut self.rotation_requests, || Err(err.clone())); + Self::drain_requests(&mut self.validation_requests, || Err(err.clone())); } fn drain_requests<T>(requests: &mut Vec<ResponseTx<T>>, result: impl Fn() -> Result<T, Error>) { diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 61e4b025ba..b494c53fbb 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -1122,7 +1122,6 @@ fn map_device_error(error: &device::Error) -> Status { Status::new(Code::Unavailable, error.to_string()) } device::Error::OtherRestError(error) => map_rest_error(error), - device::Error::ResponseFailure(error) => map_device_error(error.unpack()), _ => Status::new(Code::Unknown, error.to_string()), } } |
