struct_mapping
struct_mapping copied to clipboard
it looks like define macro something wrong
following is OK, default value is assigned
struct Friend {
std::string name;
std::set<int> counters;
};
namespace sm = struct_mapping;
/*
BEGIN_STRUCT(Friend)
MEMBER_OPTIONS(std::string, name, sm::Default{"mike"})
MEMBER_OPTIONS(std::set<int>, counters, sm::Default{std::set<int>{1, 2, 3}})
END_STRUCT
*/
BEGIN_STRUCT(MiB)
MEMBER_OPTIONS(std::vector<Friend>, friends, sm::Default{std::vector<Friend>{Friend{"mike", std::set<int>{1,2,3}}}})
END_STRUCT
int main()
{
struct_mapping::reg(&Friend::name, "name");
struct_mapping::reg(&Friend::counters, "counters");
std::istringstream json_data(R"json(
{
}
)json");
MiB mib;
struct_mapping::map_json_to_struct(mib, json_data);
std::ostringstream out_json_data;
struct_mapping::map_struct_to_json(mib, out_json_data, " ");
std::cout << out_json_data.str() << std::endl;
}
output is:
{
"friends": [
{
"name": "mike",
"counters": [
1,
2,
3
]
}
]
}
but, if define Friend using macro, it's not OK
/*
struct Friend {
std::string name;
std::set<int> counters;
};
*/
namespace sm = struct_mapping;
BEGIN_STRUCT(Friend)
MEMBER_OPTIONS(std::string, name, sm::Default{"mike"})
MEMBER_OPTIONS(std::set<int>, counters, sm::Default{std::set<int>{1, 2, 3}})
END_STRUCT
BEGIN_STRUCT(MiB)
MEMBER_OPTIONS(std::vector<Friend>, friends, sm::Default{std::vector<Friend>{Friend{"mike", std::set<int>{1,2,3}}}})
END_STRUCT
int main()
{
/*
struct_mapping::reg(&Friend::name, "name");
struct_mapping::reg(&Friend::counters, "counters");
*/
std::istringstream json_data(R"json(
{
}
)json");
MiB mib;
struct_mapping::map_json_to_struct(mib, json_data);
std::ostringstream out_json_data;
struct_mapping::map_struct_to_json(mib, out_json_data, " ");
std::cout << out_json_data.str() << std::endl;
}
the output is:
{
"friends": [
{
}
]
}