ucx/json.c

changeset 995
2f811eae2424
parent 992
f421aef8f865
equal deleted inserted replaced
994:c9395b30e5c8 995:2f811eae2424
1407 if (settings == NULL) { 1407 if (settings == NULL) {
1408 settings = &writer_default; 1408 settings = &writer_default;
1409 } 1409 }
1410 return cx_json_write_rec(target, value, wfunc, settings, 0); 1410 return cx_json_write_rec(target, value, wfunc, settings, 0);
1411 } 1411 }
1412
1413 static cxmutstr cx_json_to_string(CxJsonValue *value, const CxAllocator *allocator, CxJsonWriter *writer) {
1414 if (allocator == NULL) allocator = cxDefaultAllocator;
1415 CxBuffer buffer;
1416 if (cxBufferInit(&buffer, NULL, 128, allocator,
1417 CX_BUFFER_AUTO_EXTEND | CX_BUFFER_DO_NOT_FREE)) {
1418 return (cxmutstr){NULL, 0};
1419 }
1420 if (cx_json_write_rec(&buffer, value, cxBufferWriteFunc, writer, 0)
1421 || cxBufferTerminate(&buffer)) {
1422 // LCOV_EXCL_START
1423 buffer.flags &= ~CX_BUFFER_DO_NOT_FREE;
1424 cxBufferDestroy(&buffer);
1425 return (cxmutstr){NULL, 0};
1426 // LCOV_EXCL_STOP
1427 } else {
1428 cxmutstr str = cx_mutstrn(buffer.space, buffer.size);
1429 cxBufferDestroy(&buffer);
1430 return str;
1431 }
1432
1433 }
1434
1435 cxmutstr cxJsonToString(CxJsonValue *value, const CxAllocator *allocator) {
1436 CxJsonWriter writer = cxJsonWriterCompact();
1437 return cx_json_to_string(value, allocator, &writer);
1438 }
1439
1440 cxmutstr cxJsonToPrettyString(CxJsonValue *value, const CxAllocator *allocator) {
1441 CxJsonWriter writer = cxJsonWriterPretty(true);
1442 return cx_json_to_string(value, allocator, &writer);
1443 }

mercurial