From 434e61c231e142b6f5f8d81eb25f4ef97686d85a Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Sat, 27 Mar 2021 16:10:53 +0100 Subject: Initial commit --- src/devices.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/devices.rs (limited to 'src/devices.rs') diff --git a/src/devices.rs b/src/devices.rs new file mode 100644 index 0000000..a40207b --- /dev/null +++ b/src/devices.rs @@ -0,0 +1,62 @@ +use crate::features; +use crate::{Error, Model}; + +mod pro; + +pub use pro::Pro; + +#[derive(Debug)] +pub enum Device { + Pro(Pro), +} + +impl Device { + fn as_basic(&self) -> &dyn features::Basic { + match self { + Device::Pro(pro) => pro, + } + } +} + +impl RawDevice for Device { + fn execute(&self, command_id: impl Into, data: T) -> Result + where + T: serde::Serialize, + U: serde::de::DeserializeOwned + { + match self { + Device::Pro(pro) => pro.execute(command_id, data), + } + } +} + +impl features::Basic for Device { + fn get_model(&self) -> Model { + self.as_basic().get_model() + } + + fn get_status(&self) -> Result { + self.as_basic().get_status() + } + + fn get_user_retry_count(&self) -> Result { + self.as_basic().get_user_retry_count() + } + + fn get_admin_retry_count(&self) -> Result { + self.as_basic().get_admin_retry_count() + } +} + +impl From for Device { + fn from(pro: Pro) -> Device { + Device::Pro(pro) + } +} + +pub(crate) trait RawDevice { + fn execute(&self, command_id: impl Into, data: T) -> Result + where + T: serde::Serialize, + U: serde::de::DeserializeOwned; +} -- cgit v1.2.1