From 30ea9b27376b1c0c81afe8864e77c878ff6b6065 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Wed, 15 Oct 2025 01:01:10 +0200 Subject: [PATCH] feat: Use Typed type_name for registering proxy --- automation_devices/src/lib.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/automation_devices/src/lib.rs b/automation_devices/src/lib.rs index a02bd73..aec4265 100644 --- a/automation_devices/src/lib.rs +++ b/automation_devices/src/lib.rs @@ -20,7 +20,7 @@ use tracing::debug; macro_rules! register_device { ($device:ty) => { ::inventory::submit!(crate::RegisteredDevice::new( - stringify!($device), + <$device as ::lua_typed::Typed>::type_name, ::mlua::Lua::create_proxy::<$device> )); @@ -30,20 +30,24 @@ macro_rules! register_device { pub(crate) use register_device; +type DeviceNameFn = fn() -> String; type RegisterDeviceFn = fn(lua: &mlua::Lua) -> mlua::Result; pub struct RegisteredDevice { - name: &'static str, + name_fn: DeviceNameFn, register_fn: RegisterDeviceFn, } impl RegisteredDevice { - pub const fn new(name: &'static str, register_fn: RegisterDeviceFn) -> Self { - Self { name, register_fn } + pub const fn new(name_fn: DeviceNameFn, register_fn: RegisterDeviceFn) -> Self { + Self { + name_fn, + register_fn, + } } - pub const fn get_name(&self) -> &'static str { - self.name + pub fn get_name(&self) -> String { + (self.name_fn)() } pub fn register(&self, lua: &mlua::Lua) -> mlua::Result { @@ -58,9 +62,10 @@ pub fn create_module(lua: &mlua::Lua) -> mlua::Result { debug!("Loading devices..."); for device in inventory::iter:: { - debug!(name = device.get_name(), "Registering device"); + let name = device.get_name(); + debug!(name, "Registering device"); let proxy = device.register(lua)?; - devices.set(device.get_name(), proxy)?; + devices.set(name, proxy)?; } Ok(devices)