MCPcopy Create free account
hub / github.com/0xShug0/audio.cpp / make_cjson

Function make_cjson

src/framework/io/json.cpp:16–63  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14
15namespace {
16// Set once at parallel-server startup, before any concurrent parser callers.
17bool serialized_json_parsing = false;
18
19cJSON * make_cjson(const Value & value) {
20 switch (value.kind()) {
21 case Value::Kind::Null:
22 return cJSON_CreateNull();
23 case Value::Kind::Bool:
24 return cJSON_CreateBool(value.as_bool());
25 case Value::Kind::Number:
26 return cJSON_CreateNumber(value.as_number());
27 case Value::Kind::String:
28 return cJSON_CreateString(value.as_string().c_str());
29 case Value::Kind::Array: {
30 cJSON * array_json = cJSON_CreateArray();
31 if (array_json == nullptr) {
32 throw std::runtime_error("failed to create json array");
33 }
34 const auto & array_values = value.as_array();
35 for (const auto & child_value : array_values) {
36 cJSON * child = make_cjson(child_value);
37 if (child == nullptr) {
38 cJSON_Delete(array_json);
39 throw std::runtime_error("failed to create json array element");
40 }
41 cJSON_AddItemToArray(array_json, child);
42 }
43 return array_json;
44 }
45 case Value::Kind::Object: {
46 cJSON * object = cJSON_CreateObject();
47 if (object == nullptr) {
48 throw std::runtime_error("failed to create json object");
49 }
50 for (const auto & [key, child] : value.as_object()) {
51 cJSON * child_json = make_cjson(child);
52 if (child_json == nullptr) {
53 cJSON_Delete(object);
54 throw std::runtime_error("failed to create json object field");
55 }
56 if (!cJSON_AddItemToObject(object, key.c_str(), child_json)) {
57 cJSON_Delete(child_json);
58 cJSON_Delete(object);
59 throw std::runtime_error("failed to add json object field");
60 }
61 }
62 return object;
63 }
64 }
65 throw std::runtime_error("unsupported json value kind");
66}

Callers 1

stringifyFunction · 0.85

Calls 12

cJSON_CreateNullFunction · 0.85
cJSON_CreateBoolFunction · 0.85
cJSON_CreateNumberFunction · 0.85
cJSON_CreateStringFunction · 0.85
cJSON_CreateArrayFunction · 0.85
cJSON_DeleteFunction · 0.85
cJSON_AddItemToArrayFunction · 0.85
cJSON_CreateObjectFunction · 0.85
cJSON_AddItemToObjectFunction · 0.85
as_boolMethod · 0.80
as_numberMethod · 0.80
kindMethod · 0.45

Tested by

no test coverage detected