feat: Implement useful traits to simplify code

This commit is contained in:
2025-10-22 04:09:01 +02:00
parent 5947098bfb
commit f36adf2f19

View File

@@ -1,5 +1,6 @@
use std::collections::{HashMap, VecDeque}; use std::collections::{HashMap, VecDeque};
use std::net::{Ipv4Addr, SocketAddr}; use std::net::{Ipv4Addr, SocketAddr};
use std::ops::Deref;
use automation_lib::action_callback::ActionCallback; use automation_lib::action_callback::ActionCallback;
use automation_lib::device::Device; use automation_lib::device::Device;
@@ -60,6 +61,14 @@ impl FromLua for SetupFunction {
} }
} }
impl Deref for SetupFunction {
type Target = mlua::Function;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct Schedule(HashMap<String, ActionCallback<()>>); pub struct Schedule(HashMap<String, ActionCallback<()>>);
@@ -83,6 +92,16 @@ impl FromLua for Schedule {
} }
} }
impl IntoIterator for Schedule {
type Item = <HashMap<String, ActionCallback<()>> as IntoIterator>::Item;
type IntoIter = <HashMap<String, ActionCallback<()>> as IntoIterator>::IntoIter;
fn into_iter(self) -> Self::IntoIter {
self.0.into_iter()
}
}
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct Module { pub struct Module {
pub setup: Option<SetupFunction>, pub setup: Option<SetupFunction>,
@@ -189,7 +208,7 @@ impl Modules {
modules.extend(module.modules); modules.extend(module.modules);
if let Some(setup) = module.setup { if let Some(setup) = module.setup {
let result: mlua::Value = setup.0.call_async(client.clone()).await?; let result: mlua::Value = setup.call_async(client.clone()).await?;
if result.is_nil() { if result.is_nil() {
// We ignore nil results // We ignore nil results
@@ -209,7 +228,7 @@ impl Modules {
} }
devices.extend(module.devices); devices.extend(module.devices);
for (cron, f) in module.schedule.0 { for (cron, f) in module.schedule {
scheduler.add_job(cron, f); scheduler.add_job(cron, f);
} }
} }