@@ -9,23 +9,63 @@ namespace tao::json
9
9
{
10
10
struct type_f
11
11
{
12
- int private_a;
13
- int private_b;
12
+ int private_a1 = 11 ;
13
+ int private_a2 = 12 ;
14
+
15
+ int private_b1 = 21 ;
16
+ int private_b2 = 22 ;
17
+ int private_b3 = 23 ;
18
+ int private_b4 = 24 ;
14
19
};
15
20
16
- [[nodiscard]] int get_a ( const type_f& f ) noexcept
21
+ [[nodiscard]] int get_a1 ( const type_f& f )
22
+ {
23
+ return f.private_a1 + 100 ;
24
+ }
25
+
26
+ [[nodiscard]] int get_a2 ( const type_f& f ) noexcept
27
+ {
28
+ return f.private_a2 + 100 ;
29
+ }
30
+
31
+ [[nodiscard]] int get_b1 ( const type_f& f )
32
+ {
33
+ return f.private_b1 + 200 ;
34
+ }
35
+
36
+ [[nodiscard]] int & set_b1 ( type_f& f )
37
+ {
38
+ return f.private_b1 ;
39
+ }
40
+
41
+ [[nodiscard]] int get_b2 ( const type_f& f ) noexcept
42
+ {
43
+ return f.private_b2 + 200 ;
44
+ }
45
+
46
+ [[nodiscard]] int & set_b2 ( type_f& f )
47
+ {
48
+ return f.private_b2 ;
49
+ }
50
+
51
+ [[nodiscard]] int get_b3 ( const type_f& f )
52
+ {
53
+ return f.private_b3 + 200 ;
54
+ }
55
+
56
+ [[nodiscard]] int & set_b3 ( type_f& f ) noexcept
17
57
{
18
- return f.private_a + 10 ;
58
+ return f.private_b3 ;
19
59
}
20
60
21
- [[nodiscard]] int & set_a ( type_f& f ) noexcept
61
+ [[nodiscard]] int get_b4 ( const type_f& f ) noexcept
22
62
{
23
- return f.private_a ;
63
+ return f.private_b4 + 200 ;
24
64
}
25
65
26
- [[nodiscard]] int get_b ( const type_f& f )
66
+ [[nodiscard]] int & set_b4 ( type_f& f ) noexcept
27
67
{
28
- return f.private_b + 20 ;
68
+ return f.private_b4 ;
29
69
}
30
70
31
71
// void set_b( type_f& f, int& b ) noexcept
@@ -35,19 +75,29 @@ namespace tao::json
35
75
36
76
template <>
37
77
struct traits < type_f >
38
- : binding::object< binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " a" ), &get_a, &set_a >,
39
- binding::member< binding::member_kind::required, TAO_JSON_STRING_T( " b" ), &get_b > >
78
+ : binding::object< binding::member< binding::member_kind::required, TAO_JSON_STRING_T( " a1" ), &get_a1 >,
79
+ binding::member< binding::member_kind::required, TAO_JSON_STRING_T( " a2" ), &get_a2 >,
80
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b1" ), &get_b1, &set_b1 >,
81
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b2" ), &get_b2, &set_b2 >,
82
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b3" ), &get_b3, &set_b3 >,
83
+ binding::member2< binding::member_kind::required, TAO_JSON_STRING_T( " b4" ), &get_b4, &set_b4 > >
40
84
{
41
85
TAO_JSON_DEFAULT_KEY ( " f" );
42
86
};
43
87
44
88
void unit_test ()
45
89
{
46
- const type_f f{ 41 , 42 } ;
90
+ const type_f f;
47
91
const value v = produce::to_value ( f );
48
- TEST_ASSERT ( v.get_object ().size () == 2 );
49
- TEST_ASSERT ( v.get_object ().at ( " a" ).as < int >() == 51 );
50
- TEST_ASSERT ( v.get_object ().at ( " b" ).as < int >() == 62 );
92
+ TEST_ASSERT ( v.get_object ().size () == 6 );
93
+
94
+ TEST_ASSERT ( v.get_object ().at ( " a1" ).as < int >() == 111 );
95
+ TEST_ASSERT ( v.get_object ().at ( " a2" ).as < int >() == 112 );
96
+
97
+ TEST_ASSERT ( v.get_object ().at ( " b1" ).as < int >() == 221 );
98
+ TEST_ASSERT ( v.get_object ().at ( " b2" ).as < int >() == 222 );
99
+ TEST_ASSERT ( v.get_object ().at ( " b3" ).as < int >() == 223 );
100
+ TEST_ASSERT ( v.get_object ().at ( " b4" ).as < int >() == 224 );
51
101
}
52
102
53
103
} // namespace tao::json
0 commit comments