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 * Push an object to lua 59 * @param L lua state 60 * @param obj object to push 61 * @param allow_array traverse over implicit arrays 62 */ 63 UCL_EXTERN int ucl_object_push_lua (lua_State *L, 64 const ucl_object_t *obj, bool allow_array); 65 66 UCL_EXTERN struct ucl_lua_funcdata* ucl_object_toclosure ( 67 const ucl_object_t *obj); 68 69 #endif /* LUA_UCL_H_ */ 70