xref: /freebsd/contrib/libucl/doc/lua_api.md (revision a0409676120c1e558d0ade943019934e0f15118d)
14bf54857SBaptiste Daroussin## Module `ucl`
24bf54857SBaptiste Daroussin
34bf54857SBaptiste DaroussinThis lua module allows to parse objects from strings and to store data into
44bf54857SBaptiste Daroussinucl objects. It uses `libucl` C library to parse and manipulate with ucl objects.
54bf54857SBaptiste Daroussin
64bf54857SBaptiste DaroussinExample:
74bf54857SBaptiste Daroussin
84bf54857SBaptiste Daroussin~~~lua
94bf54857SBaptiste Daroussinlocal ucl = require("ucl")
104bf54857SBaptiste Daroussin
114bf54857SBaptiste Daroussinlocal parser = ucl.parser()
124bf54857SBaptiste Daroussinlocal res,err = parser:parse_string('{key=value}')
134bf54857SBaptiste Daroussin
144bf54857SBaptiste Daroussinif not res then
154bf54857SBaptiste Daroussin	print('parser error: ' .. err)
164bf54857SBaptiste Daroussinelse
174bf54857SBaptiste Daroussin	local obj = parser:get_object()
184bf54857SBaptiste Daroussin	local got = ucl.to_format(obj, 'json')
1939ee7a7aSBaptiste Daroussinend
204bf54857SBaptiste Daroussin
214bf54857SBaptiste Daroussinlocal table = {
224bf54857SBaptiste Daroussin  str = 'value',
234bf54857SBaptiste Daroussin  num = 100500,
244bf54857SBaptiste Daroussin  null = ucl.null,
254bf54857SBaptiste Daroussin  func = function ()
264bf54857SBaptiste Daroussin    return 'huh'
274bf54857SBaptiste Daroussin  end
2839ee7a7aSBaptiste Daroussin}
294bf54857SBaptiste Daroussin
304bf54857SBaptiste Daroussin
314bf54857SBaptiste Daroussinprint(ucl.to_format(table, 'ucl'))
324bf54857SBaptiste Daroussin-- Output:
334bf54857SBaptiste Daroussin--[[
344bf54857SBaptiste Daroussinnum = 100500;
354bf54857SBaptiste Daroussinstr = "value";
364bf54857SBaptiste Daroussinnull = null;
374bf54857SBaptiste Daroussinfunc = "huh";
384bf54857SBaptiste Daroussin--]]
394bf54857SBaptiste Daroussin~~~
404bf54857SBaptiste Daroussin
414bf54857SBaptiste Daroussin###Brief content:
424bf54857SBaptiste Daroussin
434bf54857SBaptiste Daroussin**Functions**:
444bf54857SBaptiste Daroussin
454bf54857SBaptiste Daroussin> [`ucl_object_push_lua(L, obj, allow_array)`](#function-ucl_object_push_lual-obj-allow_array)
464bf54857SBaptiste Daroussin
474bf54857SBaptiste Daroussin> [`ucl.to_format(var, format)`](#function-uclto_formatvar-format)
484bf54857SBaptiste Daroussin
494bf54857SBaptiste Daroussin
504bf54857SBaptiste Daroussin
514bf54857SBaptiste Daroussin**Methods**:
524bf54857SBaptiste Daroussin
534bf54857SBaptiste Daroussin> [`parser:parse_file(name)`](#method-parserparse_filename)
544bf54857SBaptiste Daroussin
554bf54857SBaptiste Daroussin> [`parser:parse_string(input)`](#method-parserparse_stringinput)
564bf54857SBaptiste Daroussin
574bf54857SBaptiste Daroussin> [`parser:get_object()`](#method-parserget_object)
584bf54857SBaptiste Daroussin
594bf54857SBaptiste Daroussin
604bf54857SBaptiste Daroussin## Functions
614bf54857SBaptiste Daroussin
624bf54857SBaptiste DaroussinThe module `ucl` defines the following functions.
634bf54857SBaptiste Daroussin
644bf54857SBaptiste Daroussin### Function `ucl_object_push_lua(L, obj, allow_array)`
654bf54857SBaptiste Daroussin
664bf54857SBaptiste DaroussinThis is a `C` function to push `UCL` object as lua variable. This function
674bf54857SBaptiste Daroussinconverts `obj` to lua representation using the following conversions:
684bf54857SBaptiste Daroussin
694bf54857SBaptiste Daroussin- *scalar* values are directly presented by lua objects
704bf54857SBaptiste Daroussin- *userdata* values are converted to lua function objects using `LUA_REGISTRYINDEX`,
714bf54857SBaptiste Daroussinthis can be used to pass functions from lua to c and vice-versa
72*a0409676SBaptiste Daroussin- *arrays* are converted to lua tables with numeric indices suitable for `ipairs` iterations
73*a0409676SBaptiste Daroussin- *objects* are converted to lua tables with string indices
744bf54857SBaptiste Daroussin
754bf54857SBaptiste Daroussin**Parameters:**
764bf54857SBaptiste Daroussin
774bf54857SBaptiste Daroussin- `L {lua_State}`: lua state pointer
784bf54857SBaptiste Daroussin- `obj {ucl_object_t}`: object to push
794bf54857SBaptiste Daroussin- `allow_array {bool}`: expand implicit arrays (should be true for all but partial arrays)
804bf54857SBaptiste Daroussin
814bf54857SBaptiste Daroussin**Returns:**
824bf54857SBaptiste Daroussin
834bf54857SBaptiste Daroussin- `{int}`: `1` if an object is pushed to lua
844bf54857SBaptiste Daroussin
854bf54857SBaptiste DaroussinBack to [module description](#module-ucl).
864bf54857SBaptiste Daroussin
874bf54857SBaptiste Daroussin### Function `ucl.to_format(var, format)`
884bf54857SBaptiste Daroussin
894bf54857SBaptiste DaroussinConverts lua variable `var` to the specified `format`. Formats supported are:
904bf54857SBaptiste Daroussin
914bf54857SBaptiste Daroussin- `json` - fine printed json
924bf54857SBaptiste Daroussin- `json-compact` - compacted json
934bf54857SBaptiste Daroussin- `config` - fine printed configuration
944bf54857SBaptiste Daroussin- `ucl` - same as `config`
954bf54857SBaptiste Daroussin- `yaml` - embedded yaml
964bf54857SBaptiste Daroussin
974bf54857SBaptiste DaroussinIf `var` contains function, they are called during output formatting and if
984bf54857SBaptiste Daroussinthey return string value, then this value is used for ouptut.
994bf54857SBaptiste Daroussin
1004bf54857SBaptiste Daroussin**Parameters:**
1014bf54857SBaptiste Daroussin
1024bf54857SBaptiste Daroussin- `var {variant}`: any sort of lua variable (if userdata then metafield `__to_ucl` is searched for output)
1034bf54857SBaptiste Daroussin- `format {string}`: any available format
1044bf54857SBaptiste Daroussin
1054bf54857SBaptiste Daroussin**Returns:**
1064bf54857SBaptiste Daroussin
1074bf54857SBaptiste Daroussin- `{string}`: string representation of `var` in the specific `format`.
1084bf54857SBaptiste Daroussin
1094bf54857SBaptiste DaroussinExample:
1104bf54857SBaptiste Daroussin
1114bf54857SBaptiste Daroussin~~~lua
1124bf54857SBaptiste Daroussinlocal table = {
1134bf54857SBaptiste Daroussin  str = 'value',
1144bf54857SBaptiste Daroussin  num = 100500,
1154bf54857SBaptiste Daroussin  null = ucl.null,
1164bf54857SBaptiste Daroussin  func = function ()
1174bf54857SBaptiste Daroussin    return 'huh'
1184bf54857SBaptiste Daroussin  end
11939ee7a7aSBaptiste Daroussin}
1204bf54857SBaptiste Daroussin
1214bf54857SBaptiste Daroussin
1224bf54857SBaptiste Daroussinprint(ucl.to_format(table, 'ucl'))
1234bf54857SBaptiste Daroussin-- Output:
1244bf54857SBaptiste Daroussin--[[
1254bf54857SBaptiste Daroussinnum = 100500;
1264bf54857SBaptiste Daroussinstr = "value";
1274bf54857SBaptiste Daroussinnull = null;
1284bf54857SBaptiste Daroussinfunc = "huh";
1294bf54857SBaptiste Daroussin--]]
1304bf54857SBaptiste Daroussin~~~
1314bf54857SBaptiste Daroussin
1324bf54857SBaptiste DaroussinBack to [module description](#module-ucl).
1334bf54857SBaptiste Daroussin
1344bf54857SBaptiste Daroussin
1354bf54857SBaptiste Daroussin## Methods
1364bf54857SBaptiste Daroussin
1374bf54857SBaptiste DaroussinThe module `ucl` defines the following methods.
1384bf54857SBaptiste Daroussin
1394bf54857SBaptiste Daroussin### Method `parser:parse_file(name)`
1404bf54857SBaptiste Daroussin
1414bf54857SBaptiste DaroussinParse UCL object from file.
1424bf54857SBaptiste Daroussin
1434bf54857SBaptiste Daroussin**Parameters:**
1444bf54857SBaptiste Daroussin
1454bf54857SBaptiste Daroussin- `name {string}`: filename to parse
1464bf54857SBaptiste Daroussin
1474bf54857SBaptiste Daroussin**Returns:**
1484bf54857SBaptiste Daroussin
1494bf54857SBaptiste Daroussin- `{bool[, string]}`: if res is `true` then file has been parsed successfully, otherwise an error string is also returned
1504bf54857SBaptiste Daroussin
1514bf54857SBaptiste DaroussinExample:
1524bf54857SBaptiste Daroussin
1534bf54857SBaptiste Daroussin~~~lua
1544bf54857SBaptiste Daroussinlocal parser = ucl.parser()
1554bf54857SBaptiste Daroussinlocal res,err = parser:parse_file('/some/file.conf')
1564bf54857SBaptiste Daroussin
1574bf54857SBaptiste Daroussinif not res then
1584bf54857SBaptiste Daroussin	print('parser error: ' .. err)
1594bf54857SBaptiste Daroussinelse
1604bf54857SBaptiste Daroussin	-- Do something with object
1614bf54857SBaptiste Daroussinend
1624bf54857SBaptiste Daroussin~~~
1634bf54857SBaptiste Daroussin
1644bf54857SBaptiste DaroussinBack to [module description](#module-ucl).
1654bf54857SBaptiste Daroussin
1664bf54857SBaptiste Daroussin### Method `parser:parse_string(input)`
1674bf54857SBaptiste Daroussin
1684bf54857SBaptiste DaroussinParse UCL object from file.
1694bf54857SBaptiste Daroussin
1704bf54857SBaptiste Daroussin**Parameters:**
1714bf54857SBaptiste Daroussin
1724bf54857SBaptiste Daroussin- `input {string}`: string to parse
1734bf54857SBaptiste Daroussin
1744bf54857SBaptiste Daroussin**Returns:**
1754bf54857SBaptiste Daroussin
1764bf54857SBaptiste Daroussin- `{bool[, string]}`: if res is `true` then file has been parsed successfully, otherwise an error string is also returned
1774bf54857SBaptiste Daroussin
1784bf54857SBaptiste DaroussinBack to [module description](#module-ucl).
1794bf54857SBaptiste Daroussin
1804bf54857SBaptiste Daroussin### Method `parser:get_object()`
1814bf54857SBaptiste Daroussin
1824bf54857SBaptiste DaroussinGet top object from parser and export it to lua representation.
1834bf54857SBaptiste Daroussin
1844bf54857SBaptiste Daroussin**Parameters:**
1854bf54857SBaptiste Daroussin
1864bf54857SBaptiste Daroussin	nothing
1874bf54857SBaptiste Daroussin
1884bf54857SBaptiste Daroussin**Returns:**
1894bf54857SBaptiste Daroussin
1904bf54857SBaptiste Daroussin- `{variant or nil}`: ucl object as lua native variable
1914bf54857SBaptiste Daroussin
1924bf54857SBaptiste DaroussinBack to [module description](#module-ucl).
1934bf54857SBaptiste Daroussin
1944bf54857SBaptiste Daroussin
1954bf54857SBaptiste DaroussinBack to [top](#).
1964bf54857SBaptiste Daroussin
197