struct rdl * rdl_find (struct rdl *rdl, json_object *args) { lua_rdl_method_push (rdl, "find"); if (json_object_to_lua (rdl->L, args) < 0) { VERR (rdl->rl, "Failed to convert JSON to Lua\n"); return (NULL); } /* * stack: [ Method, object, args-table ] */ if (lua_pcall (rdl->L, 2, LUA_MULTRET, 0) || lua_isnoneornil (rdl->L, 1)) { VERR (rdl->rl, "find(%s): %s\n", json_object_to_json_string (args), lua_tostring (rdl->L, -1)); return (NULL); } return (lua_pop_new_rdl (rdl)); }
const char *rdl_next_hierarchy (struct rdl *rdl, const char *last) { lua_rdl_method_push (rdl, "hierarchy_next"); if (last) lua_pushstring (rdl->L, last); else lua_pushnil (rdl->L); /* stack: [ Method, object, last ] */ if (lua_pcall (rdl->L, 2, LUA_MULTRET, 0)) { VERR (rdl->rl, "next_hierarchy: %s\n", lua_tostring (rdl->L, -1)); return (NULL); } if (lua_isnil (rdl->L, -1)) { /* End of child list is indicated by nil return */ return (NULL); } return (lua_tostring (rdl->L, -1)); }