Support Byte Arrays in Glaze #1966
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Add byte_array wrapper for explicit fixed-size character array serialization. This introduces glz::byte_array.
Currently:
char arr[4] = {0, 0, 1, 0};
std::string json;
glz::write_json(arr, json);
// Previously: json == """" (empty string - WRONG) // Expected: json == ""\u0000\u0000\u0001\u0000"" (desired behavior)
This happens because there's no way to distinguish between a regular character array and a byte array in C/C++.
This introduces:
char arr[4] = {0, 0, 1, 0};
// Traditional behavior (unchanged)
glz::write_json(arr, json); // → ""
// NEW: Explicit byte array behavior
glz::write_json(glz::byte_array{arr}, json); // → "\u0000\u0000\u0001\u0000"
Tested:
Null-only arrays: glz::byte_array{char[3]{0,0,0}} → "\u0000\u0000\u0000" Mixed content: glz::byte_array{char[4]{'a',0,'b','\n'}} → "a\u0000b\n" Normal strings: glz::byte_array{char[5]{'h','e','l','l','o'}} → "hello" Round-trip: Full serialization and deserialization support