C style array support
- Support for writing/reading C style arrays with JSON and BEVE by @stephenberry in #910
Example unit tests:
struct struct_c_arrays
{
uint16_t ints[2]{1, 2};
float floats[1]{3.14f};
};
struct struct_c_arrays_meta
{
uint16_t ints[2]{1, 2};
float floats[1]{3.14f};
};
template <>
struct glz::meta<struct_c_arrays_meta>
{
using T = struct_c_arrays_meta;
static constexpr auto value = object(&T::ints, &T::floats);
};
suite c_style_arrays = [] {
"uint32_t c array"_test = [] {
uint32_t arr[4] = {1, 2, 3, 4};
std::string s{};
glz::write_json(arr, s);
expect(s == "[1,2,3,4]") << s;
std::memset(arr, 0, 4 * sizeof(uint32_t));
expect(arr[0] == 0);
expect(!glz::read_json(arr, s));
expect(arr[0] == 1);
expect(arr[1] == 2);
expect(arr[2] == 3);
expect(arr[3] == 4);
};
"const double c array"_test = [] {
const double arr[4] = {1.1, 2.2, 3.3, 4.4};
std::string s{};
glz::write_json(arr, s);
expect(s == "[1.1,2.2,3.3,4.4]") << s;
};
"double c array"_test = [] {
double arr[4] = {1.1, 2.2, 3.3, 4.4};
std::string s{};
glz::write_json(arr, s);
expect(s == "[1.1,2.2,3.3,4.4]") << s;
std::memset(arr, 0, 4 * sizeof(double));
expect(arr[0] == 0.0);
expect(!glz::read_json(arr, s));
expect(arr[0] == 1.1);
expect(arr[1] == 2.2);
expect(arr[2] == 3.3);
expect(arr[3] == 4.4);
};
"struct_c_arrays"_test = [] {
struct_c_arrays obj{};
std::string s{};
glz::write_json(obj, s);
expect(s == R"({"ints":[1,2],"floats":[3.14]})") << s;
obj.ints[0] = 0;
obj.ints[1] = 1;
obj.floats[0] = 0.f;
expect(!glz::read_json(obj, s));
expect(obj.ints[0] == 1);
expect(obj.ints[1] == 2);
expect(obj.floats[0] == 3.14f);
};
"struct_c_arrays_meta"_test = [] {
struct_c_arrays_meta obj{};
std::string s{};
glz::write_binary(obj, s);
obj.ints[0] = 0;
obj.ints[1] = 1;
obj.floats[0] = 0.f;
expect(!glz::read_binary(obj, s));
expect(obj.ints[0] == 1);
expect(obj.ints[1] == 2);
expect(obj.floats[0] == 3.14f);
};
};Full Changelog: v2.4.4...v2.4.5