-
Notifications
You must be signed in to change notification settings - Fork 24
/
array_like.cpp
114 lines (102 loc) · 1.78 KB
/
array_like.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "struct_mapping/struct_mapping.h"
#include <iostream>
#include <list>
#include <set>
#include <sstream>
#include <string>
#include <unordered_set>
#include <vector>
struct Friend
{
std::string name;
std::set<int> counters;
bool operator==(const Friend& o) const
{
return name == o.name;
}
};
struct FriendHash
{
size_t operator()(const Friend& o) const
{
return static_cast<size_t>(o.name.size());
}
};
struct MiB
{
std::unordered_set<Friend, FriendHash> friends;
std::vector<std::list<std::string>> alien_groups;
std::vector<std::list<std::vector<std::string>>> planet_groups;
};
int main()
{
struct_mapping::reg(&Friend::name, "name");
struct_mapping::reg(&Friend::counters, "counters");
struct_mapping::reg(&MiB::friends, "friends");
struct_mapping::reg(&MiB::alien_groups, "alien_groups");
struct_mapping::reg(&MiB::planet_groups, "planet_groups");
std::istringstream json_data(R"json(
{
"friends": [
{
"name": "Griffin",
"counters": [1,3,4]
},
{
"name": "Boris",
"counters": []
},
{
"name": "Agent K",
"counters": [42, 128]
}
],
"alien_groups": [
[
"Edgar the Bug",
"Boris the Animal",
"Charlie",
"Serleena"
],
[
"Agent J",
"Agent K",
"Zed",
"Griffin",
"Roman the Fabulist"
]
],
"planet_groups": [
[
[
"Mercury",
"Venus",
"Earth",
"Mars"
],
[
"Jupiter",
"Saturn",
"Uranus",
"Neptune"
]
],
[
[
"Titan",
"Ganymede"
],
[
"Eris",
"Titania"
]
]
]
}
)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;
}