Skip to content

Commit 1d26c08

Browse files
committed
Added function JsonGetTypeAsString()
Signed-off-by: Lars Erik Wik <lars.erik.wik@northern.tech>
1 parent bf478fe commit 1d26c08

3 files changed

Lines changed: 75 additions & 0 deletions

File tree

libutils/json.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,20 @@ struct JsonElement_
7676
// JsonElement Functions
7777
// *******************************************************************************************
7878

79+
const char *JsonGetTypeAsString(const JsonElement *element)
80+
{
81+
switch (JsonGetElementType(element))
82+
{
83+
case JSON_ELEMENT_TYPE_CONTAINER:
84+
return JsonContainerTypeToString(JsonGetContainerType(element));
85+
case JSON_ELEMENT_TYPE_PRIMITIVE:
86+
return JsonPrimitiveTypeToString(JsonGetPrimitiveType(element));
87+
default:
88+
UnexpectedError("Unknown JSON container type: %d", JsonGetType(element));
89+
return "(null)";
90+
}
91+
}
92+
7993
const char *JsonContainerTypeToString(const JsonContainerType type)
8094
{
8195
switch (type)

libutils/json.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,8 @@ const char *JsonGetPropertyAsString(const JsonElement *element);
233233
#define NULL_JSON(json) ((json == NULL) || (JsonGetType(json) == JSON_TYPE_NULL))
234234
#define JSON_NOT_NULL(json) ((json != NULL) && (JsonGetType(json) != JSON_TYPE_NULL))
235235

236+
const char *JsonGetTypeAsString(const JsonElement *element);
237+
236238
//////////////////////////////////////////////////////////////////////////////
237239
// JSON Primitives
238240
//////////////////////////////////////////////////////////////////////////////

tests/unit/json_test.c

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2363,6 +2363,64 @@ static void test_json_object_merge_deep()
23632363
));
23642364
}
23652365

2366+
static void test_json_get_type_as_string()
2367+
{
2368+
{
2369+
JsonElement *element = JsonStringCreate("foo");
2370+
const char *expected = "string";
2371+
const char *actual = JsonGetTypeAsString(element);
2372+
assert_string_equal(expected, actual);
2373+
JsonDestroy(element);
2374+
}
2375+
2376+
{
2377+
JsonElement *element = JsonIntegerCreate(42);
2378+
const char *expected = "number";
2379+
const char *actual = JsonGetTypeAsString(element);
2380+
assert_string_equal(expected, actual);
2381+
JsonDestroy(element);
2382+
}
2383+
2384+
{
2385+
JsonElement *element = JsonRealCreate(3.14);
2386+
const char *expected = "number";
2387+
const char *actual = JsonGetTypeAsString(element);
2388+
assert_string_equal(expected, actual);
2389+
JsonDestroy(element);
2390+
}
2391+
2392+
{
2393+
JsonElement *element = JsonBoolCreate(true);
2394+
const char *expected = "boolean";
2395+
const char *actual = JsonGetTypeAsString(element);
2396+
assert_string_equal(expected, actual);
2397+
JsonDestroy(element);
2398+
}
2399+
2400+
{
2401+
JsonElement *element = JsonNullCreate(true);
2402+
const char *expected = "null";
2403+
const char *actual = JsonGetTypeAsString(element);
2404+
assert_string_equal(expected, actual);
2405+
JsonDestroy(element);
2406+
}
2407+
2408+
{
2409+
JsonElement *element = JsonObjectCreate(0);
2410+
const char *expected = "object";
2411+
const char *actual = JsonGetTypeAsString(element);
2412+
assert_string_equal(expected, actual);
2413+
JsonDestroy(element);
2414+
}
2415+
2416+
{
2417+
JsonElement *element = JsonArrayCreate(0);
2418+
const char *expected = "array";
2419+
const char *actual = JsonGetTypeAsString(element);
2420+
assert_string_equal(expected, actual);
2421+
JsonDestroy(element);
2422+
}
2423+
}
23662424

23672425
int main()
23682426
{
@@ -2435,6 +2493,7 @@ int main()
24352493
unit_test(test_json_null_not_null),
24362494
unit_test(test_json_object_merge_deep),
24372495
unit_test(test_compare_container_type_mismatch),
2496+
unit_test(test_json_get_type_as_string),
24382497
};
24392498

24402499
return run_tests(tests);

0 commit comments

Comments
 (0)