homelander/
execute_error.rs1use crate::traits::arm_disarm::ArmDisarmError;
2use crate::traits::cook::CookError;
3use crate::traits::dispense::DispenseError;
4use crate::traits::energy_storage::EnergyStorageError;
5use crate::traits::fan_speed::FanSpeedError;
6use crate::traits::input_selector::InputSelectorError;
7use crate::traits::lock_unlock::LockUnlockError;
8use crate::traits::network_control::NetworkControlError;
9use crate::traits::open_close::OpenCloseError;
10use crate::{CombinedDeviceError, ToStringError};
11use std::error::Error;
12
13#[derive(Debug)]
14pub enum ExecuteError {
15 Serializable(Box<dyn ToStringError>),
16 Server(Box<dyn Error>),
17}
18
19macro_rules! impl_execute_error {
20 ($ty:ty) => {
21 impl From<$ty> for ExecuteError {
22 fn from(t: $ty) -> Self {
23 Self::Serializable(Box::new(t))
24 }
25 }
26 };
27}
28
29impl From<CombinedDeviceError> for ExecuteError {
30 fn from(x: CombinedDeviceError) -> Self {
31 match x {
32 CombinedDeviceError::Other(x) => Self::Server(Box::new(x)),
33 CombinedDeviceError::DeviceError(e) => Self::Serializable(Box::new(e)),
34 CombinedDeviceError::DeviceException(e) => Self::Serializable(Box::new(e)),
35 }
36 }
37}
38
39impl_execute_error!(ArmDisarmError);
40impl_execute_error!(CookError);
41impl_execute_error!(DispenseError);
42impl_execute_error!(EnergyStorageError);
43impl_execute_error!(FanSpeedError);
44impl_execute_error!(InputSelectorError);
45impl_execute_error!(LockUnlockError);
46impl_execute_error!(NetworkControlError);
47impl_execute_error!(OpenCloseError);