@@ -9,23 +9,63 @@ namespace tao::json
99{
1010 struct type_f
1111 {
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 ;
1419 };
1520
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
1757 {
18- return f.private_a + 10 ;
58+ return f.private_b3 ;
1959 }
2060
21- [[nodiscard]] int & set_a ( type_f& f ) noexcept
61+ [[nodiscard]] int get_b4 ( const type_f& f ) noexcept
2262 {
23- return f.private_a ;
63+ return f.private_b4 + 200 ;
2464 }
2565
26- [[nodiscard]] int get_b ( const type_f& f )
66+ [[nodiscard]] int & set_b4 ( type_f& f ) noexcept
2767 {
28- return f.private_b + 20 ;
68+ return f.private_b4 ;
2969 }
3070
3171 // void set_b( type_f& f, int& b ) noexcept
@@ -35,19 +75,29 @@ namespace tao::json
3575
3676 template <>
3777 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 > >
4084 {
4185 TAO_JSON_DEFAULT_KEY ( " f" );
4286 };
4387
4488 void unit_test ()
4589 {
46- const type_f f{ 41 , 42 } ;
90+ const type_f f;
4791 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 );
51101 }
52102
53103} // namespace tao::json
0 commit comments