From 5271e5ad81543c94e4260ea630a625e8af7856a7 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Wed, 10 Sep 2025 02:02:45 +0200 Subject: [PATCH] refactor(config)!: Moved Timeout into utils module and moved module The module is now setup in automation_lib::lua::utils. --- Cargo.lock | 2 +- Cargo.toml | 1 - automation_lib/Cargo.toml | 1 + automation_lib/src/helpers/mod.rs | 10 ------ automation_lib/src/lua/mod.rs | 2 ++ automation_lib/src/lua/utils/mod.rs | 31 +++++++++++++++++++ .../src/{helpers => lua/utils}/timeout.rs | 0 config.lua | 10 +++--- src/main.rs | 20 ------------ 9 files changed, 40 insertions(+), 37 deletions(-) create mode 100644 automation_lib/src/lua/utils/mod.rs rename automation_lib/src/{helpers => lua/utils}/timeout.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 0b5f516..accc16c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,7 +99,6 @@ dependencies = [ "dotenvy", "git-version", "google_home", - "hostname", "mlua", "reqwest", "rumqttc", @@ -151,6 +150,7 @@ dependencies = [ "dyn-clone", "futures", "google_home", + "hostname", "indexmap", "inventory", "mlua", diff --git a/Cargo.toml b/Cargo.toml index 4eb207c..952c0c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,7 +77,6 @@ config = { version = "0.15.15", default-features = false, features = [ dotenvy = { workspace = true } git-version = "0.3.9" google_home = { workspace = true } -hostname = { workspace = true } mlua = { workspace = true } reqwest = { workspace = true } rumqttc = { workspace = true } diff --git a/automation_lib/Cargo.toml b/automation_lib/Cargo.toml index 066acab..cfc48ee 100644 --- a/automation_lib/Cargo.toml +++ b/automation_lib/Cargo.toml @@ -10,6 +10,7 @@ bytes = { workspace = true } dyn-clone = { workspace = true } futures = { workspace = true } google_home = { workspace = true } +hostname = { workspace = true } indexmap = { workspace = true } inventory = { workspace = true } mlua = { workspace = true } diff --git a/automation_lib/src/helpers/mod.rs b/automation_lib/src/helpers/mod.rs index 09284ea..16561bf 100644 --- a/automation_lib/src/helpers/mod.rs +++ b/automation_lib/src/helpers/mod.rs @@ -1,11 +1 @@ pub mod serialization; -mod timeout; - -pub use timeout::Timeout; - -pub fn register_with_lua(lua: &mlua::Lua) -> mlua::Result<()> { - lua.globals() - .set("Timeout", lua.create_proxy::()?)?; - - Ok(()) -} diff --git a/automation_lib/src/lua/mod.rs b/automation_lib/src/lua/mod.rs index f6ac8fc..68def01 100644 --- a/automation_lib/src/lua/mod.rs +++ b/automation_lib/src/lua/mod.rs @@ -1 +1,3 @@ pub mod traits; + +mod utils; diff --git a/automation_lib/src/lua/utils/mod.rs b/automation_lib/src/lua/utils/mod.rs new file mode 100644 index 0000000..45f06b8 --- /dev/null +++ b/automation_lib/src/lua/utils/mod.rs @@ -0,0 +1,31 @@ +mod timeout; + +use std::time::{SystemTime, UNIX_EPOCH}; + +pub use timeout::Timeout; + +use crate::Module; + +fn create_module(lua: &mlua::Lua) -> mlua::Result { + let utils = lua.create_table()?; + + utils.set("Timeout", lua.create_proxy::()?)?; + + let get_hostname = lua.create_function(|_lua, ()| { + hostname::get() + .map(|name| name.to_str().unwrap_or("unknown").to_owned()) + .map_err(mlua::ExternalError::into_lua_err) + })?; + utils.set("get_hostname", get_hostname)?; + let get_epoch = lua.create_function(|_lua, ()| { + Ok(SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time is after UNIX EPOCH") + .as_millis()) + })?; + utils.set("get_epoch", get_epoch)?; + + Ok(utils) +} + +inventory::submit! {Module::new("utils", create_module)} diff --git a/automation_lib/src/helpers/timeout.rs b/automation_lib/src/lua/utils/timeout.rs similarity index 100% rename from automation_lib/src/helpers/timeout.rs rename to automation_lib/src/lua/utils/timeout.rs diff --git a/config.lua b/config.lua index 04cfbc1..5d3541e 100644 --- a/config.lua +++ b/config.lua @@ -259,7 +259,7 @@ device_manager:add(devices.IkeaRemote.new({ })) local function kettle_timeout() - local timeout = Timeout.new() + local timeout = utils.Timeout.new() return function(self, state) if state.state and state.power < 100 then @@ -308,7 +308,7 @@ device_manager:add(devices.IkeaRemote.new({ })) local function off_timeout(duration) - local timeout = Timeout.new() + local timeout = utils.Timeout.new() return function(self, state) if state.state then @@ -371,7 +371,7 @@ local workbench_light = devices.LightColorTemperature.new({ turn_off_when_away(workbench_light) device_manager:add(workbench_light) -local delay_color_temp = Timeout.new() +local delay_color_temp = utils.Timeout.new() device_manager:add(devices.IkeaRemote.new({ name = "Remote", room = "Workbench", @@ -424,7 +424,7 @@ device_manager:add(devices.HueSwitch.new({ })) local hallway_light_automation = { - timeout = Timeout.new(), + timeout = utils.Timeout.new(), forced = false, switch_callback = function(self) return function(_, on) @@ -512,7 +512,7 @@ hallway_light_automation.group = { } local function presence(duration) - local timeout = Timeout.new() + local timeout = utils.Timeout.new() return function(_, open) if open then diff --git a/src/main.rs b/src/main.rs index 5a02b77..3a07efe 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,12 +7,10 @@ mod web; use std::net::SocketAddr; use std::path::Path; use std::process; -use std::time::{SystemTime, UNIX_EPOCH}; use ::config::{Environment, File}; use automation_lib::config::{FulfillmentConfig, MqttConfig}; use automation_lib::device_manager::DeviceManager; -use automation_lib::helpers; use automation_lib::mqtt::{self, WrappedAsyncClient}; use axum::extract::{FromRef, State}; use axum::http::StatusCode; @@ -163,24 +161,6 @@ async fn app() -> anyhow::Result<()> { lua.register_module("variables", lua.to_value(&config.variables)?)?; lua.register_module("secrets", lua.to_value(&config.secrets)?)?; - let utils = lua.create_table()?; - let get_hostname = lua.create_function(|_lua, ()| { - hostname::get() - .map(|name| name.to_str().unwrap_or("unknown").to_owned()) - .map_err(mlua::ExternalError::into_lua_err) - })?; - utils.set("get_hostname", get_hostname)?; - let get_epoch = lua.create_function(|_lua, ()| { - Ok(SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("Time is after UNIX EPOCH") - .as_millis()) - })?; - utils.set("get_epoch", get_epoch)?; - lua.register_module("utils", utils)?; - - helpers::register_with_lua(&lua)?; - let entrypoint = Path::new(&config.entrypoint); let fulfillment_config: mlua::Value = lua.load(entrypoint).eval_async().await?; let fulfillment_config: FulfillmentConfig = lua.from_value(fulfillment_config)?;