feat!: Expanded add_methods to extra_user_data
Instead of being a function it now expects a struct with the PartialUserData trait implemented. This in part ensures the correct function signature. It also adds another optional function to PartialUserData that returns definitions for the added methods.
This commit is contained in:
@@ -3,6 +3,7 @@ use std::convert::Infallible;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use automation_lib::device::{Device, LuaDeviceCreate};
|
||||
use automation_lib::lua::traits::PartialUserData;
|
||||
use automation_macro::{Device, LuaDeviceConfig};
|
||||
use lua_typed::Typed;
|
||||
use mlua::LuaSerdeExt;
|
||||
@@ -90,14 +91,15 @@ pub struct Config {
|
||||
crate::register_type!(Config);
|
||||
|
||||
#[derive(Debug, Clone, Device)]
|
||||
#[device(add_methods = Self::add_methods)]
|
||||
#[device(extra_user_data = SendNotification)]
|
||||
pub struct Ntfy {
|
||||
config: Config,
|
||||
}
|
||||
crate::register_device!(Ntfy);
|
||||
|
||||
impl Ntfy {
|
||||
fn add_methods<M: mlua::UserDataMethods<Self>>(methods: &mut M) {
|
||||
struct SendNotification;
|
||||
impl PartialUserData<Ntfy> for SendNotification {
|
||||
fn add_methods<M: mlua::UserDataMethods<Ntfy>>(methods: &mut M) {
|
||||
methods.add_async_method(
|
||||
"send_notification",
|
||||
async |lua, this, notification: mlua::Value| {
|
||||
@@ -109,6 +111,14 @@ impl Ntfy {
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
fn definitions() -> Option<String> {
|
||||
Some(format!(
|
||||
"---@async\n---@param notification {}\nfunction {}:send_notification(notification) end\n",
|
||||
<Notification as Typed>::type_name(),
|
||||
<Ntfy as Typed>::type_name(),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
|
||||
Reference in New Issue
Block a user