@@ -505,76 +505,28 @@ namespace reflect { \
505
505
JSONCONS_CATCH (...) {return false ;}
506
506
507
507
#define JSONCONS_N_MEMBER_NAME_AS (P1, P2, P3, Seq, Count ) JSONCONS_N_MEMBER_NAME_AS_LAST(P1, P2, P3, Seq, Count)
508
- #define JSONCONS_N_MEMBER_NAME_AS_LAST (P1, P2, P3, Seq, Count ) if ((num_params-Count) < num_mandatory_params1) { JSONCONS_PP_EXPAND (JSONCONS_PP_CONCAT (JSONCONS_N_MEMBER_NAME_AS_,JSONCONS_NARGS Seq) Seq)
508
+ #define JSONCONS_N_MEMBER_NAME_AS_LAST (P1, P2, P3, Seq, Count ) JSONCONS_PP_EXPAND(JSONCONS_PP_CONCAT(JSONCONS_N_MEMBER_NAME_AS_,JSONCONS_NARGS Seq) Seq)
509
509
#define JSONCONS_N_MEMBER_NAME_AS_2 (Member, Name ) \
510
- if (!json_traits_helper<Json>::set_member (ajson,Name,class_instance.Member )) \
511
- { \
512
- return result_type (jsoncons::unexpect, conv_errc::missing_required_member, json_object_member_names<value_type>::Member (unexpect)); \
513
- } \
514
- } else {json_traits_helper<Json>::set_member (ajson,Name,class_instance.Member );}
510
+ if (ajson.contains(Name)) {json_traits_helper<Json>::set_member (ajson,Name,class_instance.Member );}
515
511
#define JSONCONS_N_MEMBER_NAME_AS_3 (Member, Name, Mode ) Mode(JSONCONS_N_MEMBER_NAME_AS_2(Member, Name))
516
512
#define JSONCONS_N_MEMBER_NAME_AS_4 (Member, Name, Mode, Match ) \
517
- Mode ( \
518
- if (!json_traits_helper<Json>::set_member(ajson,Name,class_instance.Member)) \
519
- { \
520
- return result_type (jsoncons::unexpect, conv_errc::missing_required_member, json_object_member_names<value_type>::Member (unexpect)); \
521
- } \
522
- ) \
523
- } else Mode(json_traits_helper<Json>::set_member(ajson,Name,class_instance.Member));
513
+ Mode (if (ajson.contains(Name)) {json_traits_helper<Json>::set_member (ajson,Name,class_instance.Member );})
524
514
#define JSONCONS_N_MEMBER_NAME_AS_5 (Member, Name, Mode, Match, Into ) \
525
- Mode ( \
526
- if (!json_traits_helper<Json>::set_member<typename std::decay<decltype (Into((std::declval<value_type*>())->Member))>::type>(ajson, Name, class_instance.Member)) \
527
- { \
528
- return result_type (jsoncons::unexpect, conv_errc::missing_required_member, json_object_member_names<value_type>::Member (unexpect)); \
529
- } \
530
- } else Mode(json_traits_helper<Json>::set_member<typename std::decay<decltype (Into((std::declval<value_type*>())->Member))>::type>(ajson, Name, class_instance.Member ))
515
+ Mode (if (ajson.contains(Name)) {json_traits_helper<Json>::template set_member<typename std::decay<decltype (Into ((std::declval<value_type*>())->Member ))>::type>(ajson,Name,class_instance.Member );})
531
516
#define JSONCONS_N_MEMBER_NAME_AS_6 (Member, Name, Mode, Match, Into, From ) \
532
- Mode ( \
533
- if (!json_traits_helper<Json>::set_member<typename std::decay<decltype (Into ((std::declval<value_type*>())->Member ))>::type>(ajson, Name, From, class_instance.Member )) \
534
- { \
535
- return result_type (jsoncons::unexpect, conv_errc::missing_required_member, json_object_member_names<value_type>::Member (unexpect)); \
536
- } \
537
- ) \
538
- } else Mode(json_traits_helper<Json>::set_member<typename std::decay<decltype (Into((std::declval<value_type*>())->Member))>::type>(ajson, Name, From, class_instance.Member ))
517
+ Mode (if (ajson.contains(Name)) {json_traits_helper<Json>::template set_member<typename std::decay<decltype (Into ((std::declval<value_type*>())->Member ))>::type>(ajson,Name,From,class_instance.Member );})
539
518
540
519
#define JSONCONS_ALL_MEMBER_NAME_AS (P1, P2, P3, Seq, Count ) JSONCONS_ALL_MEMBER_NAME_AS_LAST(P1, P2, P3, Seq, Count)
541
520
#define JSONCONS_ALL_MEMBER_NAME_AS_LAST (P1, P2, P3, Seq, Count ) JSONCONS_PP_EXPAND(JSONCONS_PP_CONCAT(JSONCONS_ALL_MEMBER_NAME_AS_,JSONCONS_NARGS Seq) Seq)
542
521
#define JSONCONS_ALL_MEMBER_NAME_AS_2 (Member, Name ) \
543
- if (!json_traits_helper<Json>::set_member (ajson, Name, class_instance.Member )) \
544
- { \
545
- return result_type (jsoncons::unexpect, conv_errc::missing_required_member, json_object_member_names<value_type>::Member (unexpect)); \
546
- }
522
+ json_traits_helper<Json>::set_member(ajson,Name,class_instance.Member);
547
523
#define JSONCONS_ALL_MEMBER_NAME_AS_3 (Member, Name, Mode ) Mode(JSONCONS_ALL_MEMBER_NAME_AS_2(Member, Name))
548
524
#define JSONCONS_ALL_MEMBER_NAME_AS_4 (Member, Name, Mode, Match ) \
549
- Mode ( \
550
- if (!json_traits_helper<Json>::set_member (ajson, Name, class_instance.Member )) \
551
- { \
552
- return result_type (jsoncons::unexpect, conv_errc::missing_required_member, json_object_member_names<value_type>::Member (unexpect)); \
553
- } \
554
- )
525
+ Mode (json_traits_helper<Json>::set_member(ajson,Name,class_instance.Member);)
555
526
#define JSONCONS_ALL_MEMBER_NAME_AS_5 (Member, Name, Mode, Match, Into ) \
556
- Mode ( \
557
- if (!json_traits_helper<Json>::set_member<typename std::decay<decltype (Into ((std::declval<value_type*>())->Member ))>::type>(ajson, Name, class_instance.Member )) \
558
- { \
559
- return result_type (jsoncons::unexpect, conv_errc::missing_required_member, json_object_member_names<value_type>::Member (unexpect)); \
560
- } \
561
- )
527
+ Mode (json_traits_helper<Json>::template set_member<typename std::decay<decltype (Into((std::declval<value_type*>())->Member))>::type>(ajson,Name,class_instance.Member);)
562
528
#define JSONCONS_ALL_MEMBER_NAME_AS_6 (Member, Name, Mode, Match, Into, From ) \
563
- Mode ( \
564
- if (!json_traits_helper<Json>::set_member<typename std::decay<decltype (Into ((std::declval<value_type*>())->Member ))>::type>(ajson, Name, From, class_instance.Member )) \
565
- { \
566
- return result_type (jsoncons::unexpect, conv_errc::missing_required_member, json_object_member_names<value_type>::Member (unexpect)); \
567
- } \
568
- )
569
-
570
- #define JSONCONS_GENERATE_UNEXPECT_STR (P1, P2, P3, Seq, Count ) JSONCONS_GENERATE_UNEXPECT_STR_LAST(P1, P2, P3, Seq, Count)
571
- #define JSONCONS_GENERATE_UNEXPECT_STR_LAST (P1, P2, P3, Seq, Count ) JSONCONS_PP_EXPAND(JSONCONS_PP_CONCAT(JSONCONS_GENERATE_UNEXPECT_STR_,JSONCONS_NARGS Seq) Seq)
572
- #define JSONCONS_GENERATE_UNEXPECT_STR_2 (Member, Name ) \
573
- static inline const std::string& Member (unexpect_t ) {static std::string sv = std::string (class_name) + (" ." # Member); return sv;}
574
- #define JSONCONS_GENERATE_UNEXPECT_STR_3 (Member, Name, Mode ) Mode(JSONCONS_GENERATE_UNEXPECT_STR_2(Member, Name))
575
- #define JSONCONS_GENERATE_UNEXPECT_STR_4 (Member, Name, Mode, Match ) Mode(JSONCONS_GENERATE_UNEXPECT_STR_2(Member, Name))
576
- #define JSONCONS_GENERATE_UNEXPECT_STR_5 (Member, Name, Mode, Match, Into ) Mode(JSONCONS_GENERATE_UNEXPECT_STR_2(Member, Name))
577
- #define JSONCONS_GENERATE_UNEXPECT_STR_6 (Member, Name, Mode, Match, Into, From ) Mode(JSONCONS_GENERATE_UNEXPECT_STR_2(Member, Name))
529
+ Mode (json_traits_helper<Json>::template set_member<typename std::decay<decltype (Into((std::declval<value_type*>())->Member))>::type>(ajson,Name,From,class_instance.Member);)
578
530
579
531
#define JSONCONS_N_MEMBER_NAME_TO_JSON (P1, P2, P3, Seq, Count ) JSONCONS_N_MEMBER_NAME_TO_JSON_LAST(P1, P2, P3, Seq, Count)
580
532
#define JSONCONS_N_MEMBER_NAME_TO_JSON_LAST (P1, P2, P3, Seq, Count ) if ((num_params-Count) < num_mandatory_params2) JSONCONS_PP_EXPAND(JSONCONS_PP_CONCAT(JSONCONS_N_MEMBER_NAME_TO_JSON_,JSONCONS_NARGS Seq) Seq)
@@ -671,12 +623,6 @@ else \
671
623
#define JSONCONS_MEMBER_NAME_TRAITS_BASE (AsT,ToJ,ObjectSize,EnMem, NumTemplateParams, ClassType,NumMandatoryParams1,NumMandatoryParams2, ...) \
672
624
namespace jsoncons { \
673
625
namespace reflect { \
674
- template <JSONCONS_GENERATE_TPL_PARAMS(JSONCONS_GENERATE_TPL_PARAM, NumTemplateParams)> \
675
- struct json_object_member_names <ClassType JSONCONS_GENERATE_TPL_ARGS (JSONCONS_GENERATE_TPL_ARG, NumTemplateParams)> \
676
- { \
677
- constexpr static const char * class_name = # ClassType; \
678
- JSONCONS_VARIADIC_FOR_EACH (JSONCONS_GENERATE_UNEXPECT_STR,ClassType,,, __VA_ARGS__)\
679
- }; \
680
626
template <typename Json JSONCONS_GENERATE_TPL_PARAMS (JSONCONS_GENERATE_MORE_TPL_PARAM, NumTemplateParams)> \
681
627
struct json_conv_traits<Json, ClassType JSONCONS_GENERATE_TPL_ARGS(JSONCONS_GENERATE_TPL_ARG, NumTemplateParams)> \
682
628
{ \
@@ -698,6 +644,7 @@ namespace reflect { \
698
644
static result_type try_as (const Json& ajson) \
699
645
{ \
700
646
if (!ajson.is_object ()) return result_type (jsoncons::unexpect, conv_errc::expected_object, # ClassType); \
647
+ if (!is (ajson)) return result_type (jsoncons::unexpect, conv_errc::missing_required_member, # ClassType); \
701
648
value_type class_instance{}; \
702
649
JSONCONS_VARIADIC_FOR_EACH (AsT,,,, __VA_ARGS__) \
703
650
return result_type (std::move (class_instance)); \
@@ -778,7 +725,7 @@ namespace reflect { \
778
725
template <JSONCONS_GENERATE_TPL_PARAMS(JSONCONS_GENERATE_TPL_PARAM, NumTemplateParams)> \
779
726
struct json_object_member_names <ClassType JSONCONS_GENERATE_TPL_ARGS (JSONCONS_GENERATE_TPL_ARG, NumTemplateParams)> \
780
727
{ \
781
- JSONCONS_VARIADIC_FOR_EACH (JSONCONS_GENERATE_NAME_STR,ClassType ,,, __VA_ARGS__)\
728
+ JSONCONS_VARIADIC_FOR_EACH (JSONCONS_GENERATE_NAME_STR, ,,, __VA_ARGS__)\
782
729
}; \
783
730
template <typename Json JSONCONS_GENERATE_TPL_PARAMS (JSONCONS_GENERATE_MORE_TPL_PARAM, NumTemplateParams)> \
784
731
struct json_conv_traits<Json, ClassType JSONCONS_GENERATE_TPL_ARGS(JSONCONS_GENERATE_TPL_ARG, NumTemplateParams)> \
@@ -943,7 +890,7 @@ namespace reflect { \
943
890
template <> \
944
891
struct json_object_member_names <EnumType> \
945
892
{ \
946
- JSONCONS_VARIADIC_FOR_EACH (JSONCONS_GENERATE_NAME_STR,EnumType ,,, __VA_ARGS__)\
893
+ JSONCONS_VARIADIC_FOR_EACH (JSONCONS_GENERATE_NAME_STR, ,,, __VA_ARGS__)\
947
894
}; \
948
895
template <typename Json> \
949
896
struct json_conv_traits <Json, EnumType> \
@@ -1166,7 +1113,7 @@ namespace reflect { \
1166
1113
template <JSONCONS_GENERATE_TPL_PARAMS(JSONCONS_GENERATE_TPL_PARAM, NumTemplateParams)> \
1167
1114
struct json_object_member_names <ClassType JSONCONS_GENERATE_TPL_ARGS (JSONCONS_GENERATE_TPL_ARG, NumTemplateParams)> \
1168
1115
{ \
1169
- JSONCONS_VARIADIC_FOR_EACH (JSONCONS_GENERATE_NAME_STR,ClassType ,,, __VA_ARGS__)\
1116
+ JSONCONS_VARIADIC_FOR_EACH (JSONCONS_GENERATE_NAME_STR, ,,, __VA_ARGS__)\
1170
1117
}; \
1171
1118
template <typename Json JSONCONS_GENERATE_TPL_PARAMS (JSONCONS_GENERATE_MORE_TPL_PARAM, NumTemplateParams)> \
1172
1119
struct json_conv_traits<Json, ClassType JSONCONS_GENERATE_TPL_ARGS(JSONCONS_GENERATE_TPL_ARG, NumTemplateParams)> \
0 commit comments