lua: json: add method to merge json containers
This commit is contained in:
@@ -167,6 +167,20 @@ push_luajson (lua_State *L, WpSpaJson *json, gint n_recursions)
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
spa_json_merge (lua_State *L)
|
||||
{
|
||||
WpSpaJson *a = wplua_checkboxed (L, 1, WP_TYPE_SPA_JSON);
|
||||
WpSpaJson *b = wplua_checkboxed (L, 2, WP_TYPE_SPA_JSON);
|
||||
|
||||
WpSpaJson *merge = wp_json_utils_merge_containers(a, b);
|
||||
if(!merge)
|
||||
luaL_error (L, "only Json container merge supported");
|
||||
|
||||
wplua_pushboxed (L, WP_TYPE_SPA_JSON, merge);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
spa_json_parse (lua_State *L)
|
||||
{
|
||||
@@ -340,6 +354,7 @@ static const luaL_Reg spa_json_methods[] = {
|
||||
{ "is_array", spa_json_is_array },
|
||||
{ "is_object", spa_json_is_object },
|
||||
{ "parse", spa_json_parse },
|
||||
{ "merge", spa_json_merge },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
@@ -240,3 +240,26 @@ assert (type (val.args) == "table")
|
||||
assert (type (val.args.test) == "table")
|
||||
assert (val.args.test[1] == 0)
|
||||
assert (val.args.test[2] == 1)
|
||||
|
||||
json = Json.Array { "foo" }
|
||||
json2 = Json.Array { "bar" }
|
||||
json = json:merge(json2)
|
||||
assert (json:is_array())
|
||||
val = json:parse ()
|
||||
assert (val[1] == "foo")
|
||||
assert (val[2] == "bar")
|
||||
|
||||
table = {}
|
||||
table["1"] = 1
|
||||
table["2"] = 2
|
||||
json = Json.Object (table)
|
||||
table = {}
|
||||
table["3"] = 3
|
||||
table["4"] = 4
|
||||
json2 = Json.Object (table)
|
||||
json = json:merge(json2)
|
||||
val = json:parse ()
|
||||
assert (val["1"] == 1)
|
||||
assert (val["2"] == 2)
|
||||
assert (val["3"] == 3)
|
||||
assert (val["4"] == 4)
|
||||
|
Reference in New Issue
Block a user