/** * json_builder_add_null_value: * @builder: a #JsonBuilder * * If called after json_builder_set_member_name(), sets null as member of the * most recent opened object, otherwise null is added as element of the most * recent opened array. * * See also: json_builder_add_value() * * Return value: (transfer none): the #JsonBuilder, or %NULL if the call was inconsistent */ JsonBuilder * json_builder_add_null_value (JsonBuilder *builder) { JsonBuilderState *state; g_return_val_if_fail (JSON_IS_BUILDER (builder), NULL); g_return_val_if_fail (!g_queue_is_empty (builder->priv->stack), NULL); g_return_val_if_fail (json_builder_is_valid_add_mode (builder), NULL); state = g_queue_peek_head (builder->priv->stack); switch (state->mode) { case JSON_BUILDER_MODE_MEMBER: json_object_set_null_member (state->data.object, state->member_name); g_free (state->member_name); state->member_name = NULL; state->mode = JSON_BUILDER_MODE_OBJECT; break; case JSON_BUILDER_MODE_ARRAY: json_array_add_null_element (state->data.array); break; default: g_assert_not_reached (); } return builder; }
/* Marshal functions */ void searpc_set_string_to_ret_object (JsonObject *object, gchar *ret) { if (ret == NULL) json_object_set_null_member (object, "ret"); else { json_object_set_string_member (object, "ret", ret); g_free (ret); } }
void searpc_set_object_to_ret_object (JsonObject *object, GObject *ret) { if (ret == NULL) json_object_set_null_member (object, "ret"); else { json_object_set_member (object, "ret", json_gobject_serialize(ret)); g_object_unref (ret); } }
static void cockpit_router_ban_hosts (CockpitRouter *self) { RouterRule *rule; JsonObject *match = json_object_new (); json_object_set_null_member (match, "host"); rule = g_new0 (RouterRule, 1); rule->callback = process_open_not_supported; router_rule_compile (rule, match); self->rules = g_list_prepend (self->rules, rule); json_object_unref (match); }
void searpc_set_objlist_to_ret_object (JsonObject *object, GList *ret) { GList *ptr; if (ret == NULL) json_object_set_null_member (object, "ret"); else { JsonArray *array = json_array_new (); for (ptr = ret; ptr; ptr = ptr->next) json_array_add_element (array, json_gobject_serialize (ptr->data)); json_object_set_array_member (object, "ret", array); for (ptr = ret; ptr; ptr = ptr->next) g_object_unref (ptr->data); g_list_free (ret); } }
} END_TEST /* FIXME: more tests required for: * * - object containing an array (of various types). * - object containing an object (containing various types). * - object containing a double. */ START_TEST(test_cc_oci_json_obj_to_string) { gchar *str; JsonObject *obj; gboolean ret; gchar **fields; gchar *value; ck_assert (! cc_oci_json_obj_to_string (NULL, false, NULL)); ck_assert (! cc_oci_json_obj_to_string (NULL, true, NULL)); obj = json_object_new (); /* empty object, non-pretty */ str = cc_oci_json_obj_to_string (obj, false, NULL); ck_assert (str); ret = g_regex_match_simple ( /* pair of braces containing optional * whitespace. */ "{\\s*}", str, 0, 0); ck_assert (ret); g_free (str); /* empty object, pretty */ str = cc_oci_json_obj_to_string (obj, true, NULL); ck_assert (str); ret = g_regex_match_simple ( /* pair of braces containing optional * whitespace. */ "{\\s*}", str, 0, 0); ck_assert (ret); g_free (str); /* non-empty object, non-pretty */ json_object_set_string_member (obj, "test-string-set", "foo"); json_object_set_string_member (obj, "test-string-empty", ""); json_object_set_boolean_member (obj, "test-bool-false", false); json_object_set_boolean_member (obj, "test-bool-true", true); json_object_set_int_member (obj, "test-int-max", G_MAXINT64); json_object_set_int_member (obj, "test-int-min", G_MININT64); json_object_set_null_member (obj, "test-null"); str = cc_oci_json_obj_to_string (obj, false, NULL); ck_assert (str); fields = g_strsplit (str, ",", -1); ck_assert (fields); g_free (str); ck_assert (strv_contains_regex (fields, "test-string-set\\S*foo")); ck_assert (strv_contains_regex (fields, "test-string-empty\\S*\"\"")); ck_assert (strv_contains_regex (fields, "test-bool-true\\S*true")); ck_assert (strv_contains_regex (fields, "test-bool-false\\S*false")); value = g_strdup_printf ("test-int-max\\S*" "%" G_GINT64_FORMAT, G_MAXINT64); ck_assert (value); ck_assert (strv_contains_regex (fields, value)); g_free (value); value = g_strdup_printf ("test-int-min\\S*" "%" G_GINT64_FORMAT, G_MININT64); ck_assert (value); ck_assert (strv_contains_regex (fields, value)); g_free (value); g_strfreev (fields); /* clean up */ json_object_unref (obj); } END_TEST