From 1a9d99fed90e651e5492f3fdbd65ee2733fdee82 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Fri, 14 Apr 2023 21:53:52 +0200 Subject: [PATCH] Moved traits into seperate module --- src/debug_bridge.rs | 4 ++-- src/devices.rs | 8 ++++---- src/devices/audio_setup.rs | 13 ++++++++----- src/devices/contact_sensor.rs | 6 ++++-- src/devices/ikea_outlet.rs | 5 +++-- src/devices/wake_on_lan.rs | 3 ++- src/event.rs | 1 + src/hue_bridge.rs | 2 +- src/lib.rs | 1 + src/light_sensor.rs | 8 ++------ src/mqtt.rs | 8 -------- src/ntfy.rs | 9 +-------- src/presence.rs | 8 ++------ src/traits.rs | 30 ++++++++++++++++++++++++++++++ 14 files changed, 61 insertions(+), 45 deletions(-) create mode 100644 src/traits.rs diff --git a/src/debug_bridge.rs b/src/debug_bridge.rs index de87e82..ec0db73 100644 --- a/src/debug_bridge.rs +++ b/src/debug_bridge.rs @@ -6,9 +6,9 @@ use tracing::warn; use crate::{ config::MqttDeviceConfig, devices::Device, - light_sensor::OnDarkness, mqtt::{DarknessMessage, PresenceMessage}, - presence::OnPresence, + traits::OnDarkness, + traits::OnPresence, }; #[derive(Debug, Deserialize)] diff --git a/src/devices.rs b/src/devices.rs index a75e9bf..85cf5cc 100644 --- a/src/devices.rs +++ b/src/devices.rs @@ -21,10 +21,10 @@ use tracing::{debug, error, instrument, trace}; use crate::{ event::{Event, EventChannel}, - light_sensor::OnDarkness, - mqtt::OnMqtt, - ntfy::OnNotification, - presence::OnPresence, + traits::OnDarkness, + traits::OnMqtt, + traits::OnNotification, + traits::OnPresence, }; #[impl_cast::device(As: OnMqtt + OnPresence + OnDarkness + OnNotification + GoogleHomeDevice + OnOff)] diff --git a/src/devices/audio_setup.rs b/src/devices/audio_setup.rs index 9784ce5..5fe3a4c 100644 --- a/src/devices/audio_setup.rs +++ b/src/devices/audio_setup.rs @@ -4,11 +4,14 @@ use rumqttc::AsyncClient; use serde::Deserialize; use tracing::{debug, error, trace, warn}; -use crate::config::{self, CreateDevice, MqttDeviceConfig}; -use crate::error::CreateDeviceError; -use crate::event::EventChannel; -use crate::mqtt::{OnMqtt, RemoteAction, RemoteMessage}; -use crate::presence::OnPresence; +use crate::{ + config::{self, CreateDevice, MqttDeviceConfig}, + error::CreateDeviceError, + event::EventChannel, + mqtt::{RemoteAction, RemoteMessage}, + traits::OnMqtt, + traits::OnPresence, +}; use super::{As, Device}; diff --git a/src/devices/contact_sensor.rs b/src/devices/contact_sensor.rs index 2df5c17..15dc791 100644 --- a/src/devices/contact_sensor.rs +++ b/src/devices/contact_sensor.rs @@ -10,8 +10,10 @@ use crate::{ config::{CreateDevice, MqttDeviceConfig}, error::{CreateDeviceError, MissingWildcard}, event::EventChannel, - mqtt::{ContactMessage, OnMqtt, PresenceMessage}, - presence::{self, OnPresence}, + mqtt::{ContactMessage, PresenceMessage}, + presence, + traits::OnMqtt, + traits::OnPresence, }; use super::Device; diff --git a/src/devices/ikea_outlet.rs b/src/devices/ikea_outlet.rs index 5feb5a9..6cd715c 100644 --- a/src/devices/ikea_outlet.rs +++ b/src/devices/ikea_outlet.rs @@ -17,8 +17,9 @@ use crate::config::{CreateDevice, InfoConfig, MqttDeviceConfig}; use crate::devices::Device; use crate::error::CreateDeviceError; use crate::event::EventChannel; -use crate::mqtt::{OnMqtt, OnOffMessage}; -use crate::presence::OnPresence; +use crate::mqtt::OnOffMessage; +use crate::traits::OnMqtt; +use crate::traits::OnPresence; #[derive(Debug, Clone, Deserialize, PartialEq, Eq, Copy)] pub enum OutletType { diff --git a/src/devices/wake_on_lan.rs b/src/devices/wake_on_lan.rs index e934698..15adbf6 100644 --- a/src/devices/wake_on_lan.rs +++ b/src/devices/wake_on_lan.rs @@ -17,7 +17,8 @@ use crate::{ config::{CreateDevice, InfoConfig, MqttDeviceConfig}, error::CreateDeviceError, event::EventChannel, - mqtt::{ActivateMessage, OnMqtt}, + mqtt::ActivateMessage, + traits::OnMqtt, }; use super::Device; diff --git a/src/event.rs b/src/event.rs index 3db82bc..c06ddaf 100644 --- a/src/event.rs +++ b/src/event.rs @@ -14,6 +14,7 @@ pub enum Event { pub type Sender = mpsc::Sender; pub type Receiver = mpsc::Receiver; +#[derive(Clone)] pub struct EventChannel(Sender); impl EventChannel { diff --git a/src/hue_bridge.rs b/src/hue_bridge.rs index 983aeb7..5435f78 100644 --- a/src/hue_bridge.rs +++ b/src/hue_bridge.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use serde::{Deserialize, Serialize}; use tracing::{error, trace, warn}; -use crate::{devices::Device, light_sensor::OnDarkness, presence::OnPresence}; +use crate::{devices::Device, traits::OnDarkness, traits::OnPresence}; #[derive(Debug)] pub enum Flag { diff --git a/src/lib.rs b/src/lib.rs index 0aec4df..8efedfb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,3 +11,4 @@ pub mod light_sensor; pub mod mqtt; pub mod ntfy; pub mod presence; +pub mod traits; diff --git a/src/light_sensor.rs b/src/light_sensor.rs index ffc6e4d..a0c7cfb 100644 --- a/src/light_sensor.rs +++ b/src/light_sensor.rs @@ -7,14 +7,10 @@ use crate::{ config::MqttDeviceConfig, devices::Device, event::{self, Event, EventChannel}, - mqtt::{BrightnessMessage, OnMqtt}, + mqtt::BrightnessMessage, + traits::OnMqtt, }; -#[async_trait] -pub trait OnDarkness: Sync + Send + 'static { - async fn on_darkness(&mut self, dark: bool); -} - #[derive(Debug, Clone, Deserialize)] pub struct LightSensorConfig { #[serde(flatten)] diff --git a/src/mqtt.rs b/src/mqtt.rs index 225c39e..b362afd 100644 --- a/src/mqtt.rs +++ b/src/mqtt.rs @@ -1,6 +1,5 @@ use std::time::{SystemTime, UNIX_EPOCH}; -use async_trait::async_trait; use bytes::Bytes; use serde::{Deserialize, Serialize}; use thiserror::Error; @@ -10,13 +9,6 @@ use rumqttc::{Event, EventLoop, Incoming, Publish}; use crate::event::{self, EventChannel}; -#[async_trait] -#[impl_cast::device_trait] -pub trait OnMqtt { - fn topics(&self) -> Vec<&str>; - async fn on_mqtt(&mut self, message: Publish); -} - #[derive(Debug, Error)] pub enum ParseError { #[error("Invalid message payload received: {0:?}")] diff --git a/src/ntfy.rs b/src/ntfy.rs index 1942367..81b5e96 100644 --- a/src/ntfy.rs +++ b/src/ntfy.rs @@ -1,7 +1,6 @@ use std::collections::HashMap; use async_trait::async_trait; -use impl_cast::device_trait; use serde::Serialize; use serde_repr::*; use tokio::sync::mpsc; @@ -11,18 +10,12 @@ use crate::{ config::NtfyConfig, devices::Device, event::{self, Event, EventChannel}, - presence::OnPresence, + traits::{OnNotification, OnPresence}, }; pub type Sender = mpsc::Sender; pub type Receiver = mpsc::Receiver; -#[async_trait] -#[device_trait] -pub trait OnNotification { - async fn on_notification(&mut self, notification: Notification); -} - #[derive(Debug)] pub struct Ntfy { base_url: String, diff --git a/src/presence.rs b/src/presence.rs index a53577a..6e98341 100644 --- a/src/presence.rs +++ b/src/presence.rs @@ -9,14 +9,10 @@ use crate::{ config::MqttDeviceConfig, devices::Device, event::{self, Event, EventChannel}, - mqtt::{OnMqtt, PresenceMessage}, + mqtt::PresenceMessage, + traits::OnMqtt, }; -#[async_trait] -pub trait OnPresence: Sync + Send + 'static { - async fn on_presence(&mut self, presence: bool); -} - #[derive(Debug, Deserialize)] pub struct PresenceConfig { #[serde(flatten)] diff --git a/src/traits.rs b/src/traits.rs new file mode 100644 index 0000000..2cd48c1 --- /dev/null +++ b/src/traits.rs @@ -0,0 +1,30 @@ +use async_trait::async_trait; +use impl_cast::device_trait; +use rumqttc::Publish; + +use crate::ntfy::Notification; + +#[async_trait] +#[device_trait] +pub trait OnMqtt { + fn topics(&self) -> Vec<&str>; + async fn on_mqtt(&mut self, message: Publish); +} + +#[async_trait] +#[device_trait] +pub trait OnPresence { + async fn on_presence(&mut self, presence: bool); +} + +#[async_trait] +#[device_trait] +pub trait OnDarkness { + async fn on_darkness(&mut self, dark: bool); +} + +#[async_trait] +#[device_trait] +pub trait OnNotification { + async fn on_notification(&mut self, notification: Notification); +}