src/json.c

changeset 1573
cd2e974410ad
parent 1567
f60f23b362e9
child 1574
cfbf4a3a9c11
equal deleted inserted replaced
1572:0499bf03aef3 1573:cd2e974410ad
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 // LCOV_EXCL_START
1422 buffer.flags &= ~CX_BUFFER_DO_NOT_FREE;
1423 cxBufferDestroy(&buffer);
1424 return (cxmutstr){NULL, 0};
1425 // LCOV_EXCL_STOP
1426 } else {
1427 cxBufferTerminate(&buffer);
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