feat: Use Typed type_name for registering proxy
This commit is contained in:
@@ -20,7 +20,7 @@ use tracing::debug;
|
|||||||
macro_rules! register_device {
|
macro_rules! register_device {
|
||||||
($device:ty) => {
|
($device:ty) => {
|
||||||
::inventory::submit!(crate::RegisteredDevice::new(
|
::inventory::submit!(crate::RegisteredDevice::new(
|
||||||
stringify!($device),
|
<$device as ::lua_typed::Typed>::type_name,
|
||||||
::mlua::Lua::create_proxy::<$device>
|
::mlua::Lua::create_proxy::<$device>
|
||||||
));
|
));
|
||||||
|
|
||||||
@@ -30,20 +30,24 @@ macro_rules! register_device {
|
|||||||
|
|
||||||
pub(crate) use register_device;
|
pub(crate) use register_device;
|
||||||
|
|
||||||
|
type DeviceNameFn = fn() -> String;
|
||||||
type RegisterDeviceFn = fn(lua: &mlua::Lua) -> mlua::Result<mlua::AnyUserData>;
|
type RegisterDeviceFn = fn(lua: &mlua::Lua) -> mlua::Result<mlua::AnyUserData>;
|
||||||
|
|
||||||
pub struct RegisteredDevice {
|
pub struct RegisteredDevice {
|
||||||
name: &'static str,
|
name_fn: DeviceNameFn,
|
||||||
register_fn: RegisterDeviceFn,
|
register_fn: RegisterDeviceFn,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RegisteredDevice {
|
impl RegisteredDevice {
|
||||||
pub const fn new(name: &'static str, register_fn: RegisterDeviceFn) -> Self {
|
pub const fn new(name_fn: DeviceNameFn, register_fn: RegisterDeviceFn) -> Self {
|
||||||
Self { name, register_fn }
|
Self {
|
||||||
|
name_fn,
|
||||||
|
register_fn,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const fn get_name(&self) -> &'static str {
|
pub fn get_name(&self) -> String {
|
||||||
self.name
|
(self.name_fn)()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn register(&self, lua: &mlua::Lua) -> mlua::Result<mlua::AnyUserData> {
|
pub fn register(&self, lua: &mlua::Lua) -> mlua::Result<mlua::AnyUserData> {
|
||||||
@@ -58,9 +62,10 @@ pub fn create_module(lua: &mlua::Lua) -> mlua::Result<mlua::Table> {
|
|||||||
|
|
||||||
debug!("Loading devices...");
|
debug!("Loading devices...");
|
||||||
for device in inventory::iter::<RegisteredDevice> {
|
for device in inventory::iter::<RegisteredDevice> {
|
||||||
debug!(name = device.get_name(), "Registering device");
|
let name = device.get_name();
|
||||||
|
debug!(name, "Registering device");
|
||||||
let proxy = device.register(lua)?;
|
let proxy = device.register(lua)?;
|
||||||
devices.set(device.get_name(), proxy)?;
|
devices.set(name, proxy)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(devices)
|
Ok(devices)
|
||||||
|
|||||||
Reference in New Issue
Block a user