Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/external/libucl/include/lua_ucl.h
2066 views
1
/* Copyright (c) 2014, Vsevolod Stakhov
2
* All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
6
* * Redistributions of source code must retain the above copyright
7
* notice, this list of conditions and the following disclaimer.
8
* * Redistributions in binary form must reproduce the above copyright
9
* notice, this list of conditions and the following disclaimer in the
10
* documentation and/or other materials provided with the distribution.
11
*
12
* THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY
13
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15
* DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
16
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
17
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
18
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
19
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
20
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22
*/
23
#ifndef LUA_UCL_H_
24
#define LUA_UCL_H_
25
26
#ifdef HAVE_CONFIG_H
27
#include "config.h"
28
#endif
29
30
#include <lua.h>
31
#include <lauxlib.h>
32
#include <lualib.h>
33
#include "ucl.h"
34
35
/**
36
* Closure structure for lua function storing inside UCL
37
*/
38
struct ucl_lua_funcdata {
39
lua_State *L;
40
int idx;
41
char *ret;
42
};
43
44
/**
45
* Initialize lua UCL API
46
*/
47
UCL_EXTERN int luaopen_ucl (lua_State *L);
48
49
/**
50
* Import UCL object from lua state
51
* @param L lua state
52
* @param idx index of object at the lua stack to convert to UCL
53
* @return new UCL object or NULL, the caller should unref object after using
54
*/
55
UCL_EXTERN ucl_object_t* ucl_object_lua_import (lua_State *L, int idx);
56
57
/**
58
* Import UCL object from lua state, escaping JSON strings
59
* @param L lua state
60
* @param idx index of object at the lua stack to convert to UCL
61
* @return new UCL object or NULL, the caller should unref object after using
62
*/
63
UCL_EXTERN ucl_object_t* ucl_object_lua_import_escape (lua_State *L, int idx);
64
65
/**
66
* Push an object to lua
67
* @param L lua state
68
* @param obj object to push
69
* @param allow_array traverse over implicit arrays
70
*/
71
UCL_EXTERN int ucl_object_push_lua (lua_State *L,
72
const ucl_object_t *obj, bool allow_array);
73
/**
74
* Push an object to lua replacing all ucl.null with `false`
75
* @param L lua state
76
* @param obj object to push
77
* @param allow_array traverse over implicit arrays
78
*/
79
UCL_EXTERN int ucl_object_push_lua_filter_nil (lua_State *L,
80
const ucl_object_t *obj,
81
bool allow_array);
82
83
UCL_EXTERN struct ucl_lua_funcdata* ucl_object_toclosure (const ucl_object_t *obj);
84
85
#endif /* LUA_UCL_H_ */
86
87