Blob Blame History Raw
From f769ea8f30c6ea4639c47c4a6dec3f21884ad400 Mon Sep 17 00:00:00 2001
From: James Calligeros <jcalligeros99@gmail.com>
Date: Wed, 3 Apr 2024 22:19:09 +1000
Subject: [PATCH 06/10] lua: add constructor and file ops for WpConf

This exposes the ability to load a SPA-JSON representation of a WpConf
object from an arbitrary file on disk to the Lua API

Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
---
 modules/module-lua-scripting/api/api.c   | 46 ++++++++++++++++++++++++
 modules/module-lua-scripting/api/api.lua |  3 ++
 2 files changed, 49 insertions(+)

diff --git a/modules/module-lua-scripting/api/api.c b/modules/module-lua-scripting/api/api.c
index 46df75b5..4eb889b9 100644
--- a/modules/module-lua-scripting/api/api.c
+++ b/modules/module-lua-scripting/api/api.c
@@ -1618,6 +1618,48 @@ impl_module_new (lua_State *L)
 
 /* WpConf */
 
+
+static int
+conf_new (lua_State *L)
+{
+  const char *path = luaL_checkstring (L, 1);
+  WpProperties *p = NULL;
+  WpConf *conf = NULL;
+
+  if (lua_istable (L, 2)) {
+    p = wplua_table_to_properties (L, 2);
+  }
+
+  conf = wp_conf_new (path, p);
+  if (conf) {
+    wplua_pushobject (L, conf);
+  } else
+    lua_pushnil (L);
+  return 1;
+}
+
+static int
+conf_open (lua_State *L)
+{
+  WpConf *conf = wplua_checkobject (L, 1, WP_TYPE_CONF);
+  g_autoptr (GError) err = NULL;
+
+  if (wp_conf_open (conf, &err)) {
+    lua_pushnil (L);
+  } else
+    lua_pushstring (L, err->message);
+  return 1;
+}
+
+static int
+conf_close (lua_State *L)
+{
+  WpConf *conf = wplua_checkobject (L, 1, WP_TYPE_CONF);
+
+  wp_conf_close (conf);
+  return 0;
+}
+
 static int
 conf_get_section_as_properties (lua_State *L)
 {
@@ -1712,6 +1754,8 @@ conf_get_section_as_json (lua_State *L)
 }
 
 static const luaL_Reg conf_methods[] = {
+  { "open", conf_open },
+  { "close", conf_close },
   { "get_section_as_properties", conf_get_section_as_properties },
   { "get_section_as_object", conf_get_section_as_object },
   { "get_section_as_array", conf_get_section_as_array },
@@ -2764,6 +2808,8 @@ wp_lua_scripting_api_init (lua_State *L)
       async_event_hook_new, NULL);
   wplua_register_type_methods (L, WP_TYPE_TRANSITION,
       NULL, transition_methods);
+  wplua_register_type_methods (L, WP_TYPE_CONF,
+      conf_new, conf_methods);
 
   if (!wplua_load_uri (L, URI_API, &error) ||
       !wplua_pcall (L, 0, 0, &error)) {
diff --git a/modules/module-lua-scripting/api/api.lua b/modules/module-lua-scripting/api/api.lua
index a000d96c..b53686c2 100644
--- a/modules/module-lua-scripting/api/api.lua
+++ b/modules/module-lua-scripting/api/api.lua
@@ -184,6 +184,9 @@ local Feature = {
   },
 }
 
+-- Allow calling Conf() to instantiate a new WpConf
+WpConf["__new"] = WpConf_new
+
 SANDBOX_EXPORT = {
   Debug = Debug,
   Id = Id,
-- 
2.44.0