@@ -23,116 +23,225 @@ namespace tao::json
23
23
int private_c4 = 34 ;
24
24
};
25
25
26
- [[nodiscard]] int get_a1 ( const type_f& f )
26
+ struct type_g
27
+ {
28
+ int private_b1 = 21 ;
29
+ int private_b2 = 22 ;
30
+ int private_b3 = 23 ;
31
+ int private_b4 = 24 ;
32
+
33
+ int private_c1 = 31 ;
34
+ int private_c2 = 32 ;
35
+ int private_c3 = 33 ;
36
+ int private_c4 = 34 ;
37
+ };
38
+
39
+ [[nodiscard]] int get_fa1 ( const type_f& f )
27
40
{
28
41
return f.private_a1 + 100 ;
29
42
}
30
43
31
- [[nodiscard]] int get_a2 ( const type_f& f ) noexcept
44
+ [[nodiscard]] int get_fa2 ( const type_f& f ) noexcept
32
45
{
33
46
return f.private_a2 + 100 ;
34
47
}
35
48
36
- [[nodiscard]] int get_b1 ( const type_f& f )
49
+ [[nodiscard]] int get_fb1 ( const type_f& f )
50
+ {
51
+ return f.private_b1 + 200 ;
52
+ }
53
+
54
+ [[nodiscard]] int & set_fb1 ( type_f& f )
55
+ {
56
+ return f.private_b1 ;
57
+ }
58
+
59
+ [[nodiscard]] int get_fb2 ( const type_f& f ) noexcept
60
+ {
61
+ return f.private_b2 + 200 ;
62
+ }
63
+
64
+ [[nodiscard]] int & set_fb2 ( type_f& f )
65
+ {
66
+ return f.private_b2 ;
67
+ }
68
+
69
+ [[nodiscard]] int get_fb3 ( const type_f& f )
70
+ {
71
+ return f.private_b3 + 200 ;
72
+ }
73
+
74
+ [[nodiscard]] int & set_fb3 ( type_f& f ) noexcept
75
+ {
76
+ return f.private_b3 ;
77
+ }
78
+
79
+ [[nodiscard]] int get_fb4 ( const type_f& f ) noexcept
80
+ {
81
+ return f.private_b4 + 200 ;
82
+ }
83
+
84
+ [[nodiscard]] int & set_fb4 ( type_f& f ) noexcept
85
+ {
86
+ return f.private_b4 ;
87
+ }
88
+
89
+ [[nodiscard]] int get_fc1 ( const type_f& f ) noexcept
90
+ {
91
+ return f.private_c1 + 300 ;
92
+ }
93
+
94
+ void set_fc1 ( type_f& f, const int c ) noexcept
95
+ {
96
+ f.private_c1 = c;
97
+ }
98
+
99
+ [[nodiscard]] int get_fc2 ( const type_f& f )
100
+ {
101
+ return f.private_c2 + 300 ;
102
+ }
103
+
104
+ void set_fc2 ( type_f& f, const int & c ) noexcept
105
+ {
106
+ f.private_c2 = c;
107
+ }
108
+
109
+ [[nodiscard]] int get_fc3 ( const type_f& f ) noexcept
110
+ {
111
+ return f.private_c3 + 300 ;
112
+ }
113
+
114
+ void set_fc3 ( type_f& f, int && c ) noexcept
115
+ {
116
+ f.private_c3 = c;
117
+ }
118
+
119
+ [[nodiscard]] int get_fc4 ( const type_f& f )
120
+ {
121
+ return f.private_c4 + 300 ;
122
+ }
123
+
124
+ void set_fc4 ( type_f& f, const int & c )
125
+ {
126
+ f.private_c4 = c;
127
+ }
128
+
129
+ [[nodiscard]] int get_gb1 ( const type_g& f )
37
130
{
38
131
return f.private_b1 + 200 ;
39
132
}
40
133
41
- [[nodiscard]] int & set_b1 ( type_f & f )
134
+ [[nodiscard]] int & set_gb1 ( type_g & f )
42
135
{
43
136
return f.private_b1 ;
44
137
}
45
138
46
- [[nodiscard]] int get_b2 ( const type_f & f ) noexcept
139
+ [[nodiscard]] int get_gb2 ( const type_g & f ) noexcept
47
140
{
48
141
return f.private_b2 + 200 ;
49
142
}
50
143
51
- [[nodiscard]] int & set_b2 ( type_f & f )
144
+ [[nodiscard]] int & set_gb2 ( type_g & f )
52
145
{
53
146
return f.private_b2 ;
54
147
}
55
148
56
- [[nodiscard]] int get_b3 ( const type_f & f )
149
+ [[nodiscard]] int get_gb3 ( const type_g & f )
57
150
{
58
151
return f.private_b3 + 200 ;
59
152
}
60
153
61
- [[nodiscard]] int & set_b3 ( type_f & f ) noexcept
154
+ [[nodiscard]] int & set_gb3 ( type_g & f ) noexcept
62
155
{
63
156
return f.private_b3 ;
64
157
}
65
158
66
- [[nodiscard]] int get_b4 ( const type_f & f ) noexcept
159
+ [[nodiscard]] int get_gb4 ( const type_g & f ) noexcept
67
160
{
68
161
return f.private_b4 + 200 ;
69
162
}
70
163
71
- [[nodiscard]] int & set_b4 ( type_f & f ) noexcept
164
+ [[nodiscard]] int & set_gb4 ( type_g & f ) noexcept
72
165
{
73
166
return f.private_b4 ;
74
167
}
75
168
76
- [[nodiscard]] int get_c1 ( const type_f & f ) noexcept
169
+ [[nodiscard]] int get_gc1 ( const type_g & f ) noexcept
77
170
{
78
171
return f.private_c1 + 300 ;
79
172
}
80
173
81
- void set_c1 ( type_f & f, const int c ) noexcept
174
+ void set_gc1 ( type_g & f, const int c ) noexcept
82
175
{
83
176
f.private_c1 = c;
84
177
}
85
178
86
- [[nodiscard]] int get_c2 ( const type_f & f )
179
+ [[nodiscard]] int get_gc2 ( const type_g & f )
87
180
{
88
181
return f.private_c2 + 300 ;
89
182
}
90
183
91
- void set_c2 ( type_f & f, const int & c ) noexcept
184
+ void set_gc2 ( type_g & f, const int & c ) noexcept
92
185
{
93
186
f.private_c2 = c;
94
187
}
95
188
96
- [[nodiscard]] int get_c3 ( const type_f & f ) noexcept
189
+ [[nodiscard]] int get_gc3 ( const type_g & f ) noexcept
97
190
{
98
191
return f.private_c3 + 300 ;
99
192
}
100
193
101
- void set_c3 ( type_f & f, int && c ) noexcept
194
+ void set_gc3 ( type_g & f, int && c ) noexcept
102
195
{
103
196
f.private_c3 = c;
104
197
}
105
198
106
- [[nodiscard]] int get_c4 ( const type_f & f )
199
+ [[nodiscard]] int get_gc4 ( const type_g & f )
107
200
{
108
201
return f.private_c4 + 300 ;
109
202
}
110
203
111
- void set_c4 ( type_f & f, const int & c )
204
+ void set_gc4 ( type_g & f, const int & c )
112
205
{
113
206
f.private_c4 = c;
114
207
}
115
208
116
209
template <>
117
210
struct traits < type_f >
118
- : binding::object< binding::member< binding::member_kind::required, TAO_JSON_STRING_T( " a1" ), &get_a1 >,
119
- binding::member< binding::member_kind::required, TAO_JSON_STRING_T( " a2" ), &get_a2 >,
120
- binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b1" ), &get_b1, &set_b1 >,
121
- binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b2" ), &get_b2, &set_b2 >,
122
- binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b3" ), &get_b3, &set_b3 >,
123
- binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b4" ), &get_b4, &set_b4 >,
124
- binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c1" ), &get_c1, &set_c1 >,
125
- binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c2" ), &get_c2, &set_c2 >,
126
- binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c3" ), &get_c3, &set_c3 >,
127
- binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c4" ), &get_c4, &set_c4 > >
211
+ : binding::object< binding::member< binding::member_kind::required, TAO_JSON_STRING_T( " a1" ), &get_fa1 >,
212
+ binding::member< binding::member_kind::required, TAO_JSON_STRING_T( " a2" ), &get_fa2 >,
213
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b1" ), &get_fb1, &set_fb1 >,
214
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b2" ), &get_fb2, &set_fb2 >,
215
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b3" ), &get_fb3, &set_fb3 >,
216
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b4" ), &get_fb4, &set_fb4 >,
217
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c1" ), &get_fc1, &set_fc1 >,
218
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c2" ), &get_fc2, &set_fc2 >,
219
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c3" ), &get_fc3, &set_fc3 >,
220
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c4" ), &get_fc4, &set_fc4 > >
221
+ {
222
+ TAO_JSON_DEFAULT_KEY ( " f" );
223
+ };
224
+
225
+ template <>
226
+ struct traits < type_g >
227
+ : binding::object< binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b1" ), &get_gb1, &set_gb1 >,
228
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b2" ), &get_gb2, &set_gb2 >,
229
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b3" ), &get_gb3, &set_gb3 >,
230
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b4" ), &get_gb4, &set_gb4 >,
231
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c1" ), &get_gc1, &set_gc1 >,
232
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c2" ), &get_gc2, &set_gc2 >,
233
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c3" ), &get_gc3, &set_gc3 >,
234
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " c4" ), &get_gc4, &set_gc4 > >
128
235
{
129
236
TAO_JSON_DEFAULT_KEY ( " f" );
130
237
};
131
238
132
239
void unit_test ()
133
240
{
134
241
const type_f f;
135
- const value v = produce::to_value ( f );
242
+
243
+ value v = produce::to_value ( f );
244
+
136
245
TEST_ASSERT ( v.get_object ().size () == 10 );
137
246
138
247
TEST_ASSERT ( v.get_object ().at ( " a1" ).as < int >() == 111 );
@@ -148,7 +257,20 @@ namespace tao::json
148
257
TEST_ASSERT ( v.get_object ().at ( " c3" ).as < int >() == 333 );
149
258
TEST_ASSERT ( v.get_object ().at ( " c4" ).as < int >() == 334 );
150
259
151
- // v.to( f );
260
+ v.get_object ().erase ( " a1" );
261
+ v.get_object ().erase ( " a2" );
262
+
263
+ const type_g g = v.as < type_g >();
264
+
265
+ TEST_ASSERT ( g.private_b1 == 221 );
266
+ TEST_ASSERT ( g.private_b2 == 222 );
267
+ TEST_ASSERT ( g.private_b3 == 223 );
268
+ TEST_ASSERT ( g.private_b4 == 224 );
269
+
270
+ TEST_ASSERT ( g.private_c1 == 331 );
271
+ TEST_ASSERT ( g.private_c2 == 332 );
272
+ TEST_ASSERT ( g.private_c3 == 333 );
273
+ TEST_ASSERT ( g.private_c4 == 334 );
152
274
}
153
275
154
276
} // namespace tao::json
0 commit comments