struct_mapping icon indicating copy to clipboard operation
struct_mapping copied to clipboard

it looks like define macro something wrong

Open yanlusu opened this issue 2 years ago • 0 comments

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": [
    {
    }
  ]
}

yanlusu avatar Nov 01 '22 08:11 yanlusu