From 2e553038bab591e383b9beb4f9c78f8410e6ab61 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Fri, 26 Apr 2024 06:07:20 +0200 Subject: [PATCH] Started work on generating definitions --- .gitignore | 1 + automation_macro/src/lua_device.rs | 17 ++++++++++++++ automation_macro/src/lua_device_config.rs | 13 +++++++++++ definitions/definitions.lua | 27 +++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 definitions/definitions.lua diff --git a/.gitignore b/.gitignore index fedaa2b..881bd77 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target .env +/definitions/generated diff --git a/automation_macro/src/lua_device.rs b/automation_macro/src/lua_device.rs index fcccc1b..0bbe216 100644 --- a/automation_macro/src/lua_device.rs +++ b/automation_macro/src/lua_device.rs @@ -1,3 +1,6 @@ +use std::fs::File; +use std::io::Write; + use proc_macro2::TokenStream; use quote::quote; use syn::DeriveInput; @@ -24,5 +27,19 @@ pub fn impl_lua_device_macro(ast: &DeriveInput) -> TokenStream { } }; + let def = format!( + r#"--- @meta +--- @class {name} +{name} = {{}} +--- @param config {name}Config +--- @return Config +function {name}.new(config) end"# + ); + + File::create(format!("./definitions/generated/{name}.lua")) + .unwrap() + .write_all(def.as_bytes()) + .unwrap(); + gen } diff --git a/automation_macro/src/lua_device_config.rs b/automation_macro/src/lua_device_config.rs index 96f83c9..7b2b662 100644 --- a/automation_macro/src/lua_device_config.rs +++ b/automation_macro/src/lua_device_config.rs @@ -1,3 +1,6 @@ +use std::fs::File; +use std::io::Write; + use itertools::Itertools; use proc_macro2::TokenStream; use quote::{quote, quote_spanned}; @@ -276,5 +279,15 @@ pub fn impl_lua_device_config_macro(ast: &DeriveInput) -> TokenStream { } }; + let mut def = format!("--- @meta\n--- @class {name}\n"); + for field in fields { + def += &format!("--- @field {} any\n", field.ident.clone().unwrap()) + } + + File::create(format!("./definitions/generated/{name}.lua")) + .unwrap() + .write_all(def.as_bytes()) + .unwrap(); + impl_from_lua } diff --git a/definitions/definitions.lua b/definitions/definitions.lua new file mode 100644 index 0000000..d3f9b00 --- /dev/null +++ b/definitions/definitions.lua @@ -0,0 +1,27 @@ +--- @meta + +automation = {} + +--- @class Device +--- @class Config + +--- @class DeviceManager +automation.device_manager = {} + +--- @class MqttClient +automation.mqtt_client = {} + +--- @param identifier string +--- @param config Config +--- @return Device +function automation.device_manager:create(identifier, config) end + +--- @class DebugBridge +DebugBridge = {} + +--- @class DebugBridgeConfig +--- @field topic string + +--- @param config DebugBridgeConfig +--- @return Config +function DebugBridge.new(config) end