| 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 } |