21 #include <daw/daw_arith_traits.h>
22 #include <daw/daw_cpp_feature_check.h>
23 #include <daw/daw_fwd_pack_apply.h>
24 #include <daw/daw_move.h>
25 #include <daw/daw_parser_helper_sv.h>
26 #include <daw/daw_scope_guard.h>
27 #include <daw/daw_string_view.h>
28 #include <daw/daw_traits.h>
34 #include <string_view>
37 #if defined( __cpp_constexpr_dynamic_alloc )
38 #define CPP20CONSTEXPR constexpr
40 #define CPP20CONSTEXPR
45 template<
typename ParseState>
46 class basic_json_value;
48 namespace json_details {
54 typename daw::detected_or_t<T, ordered_member_subtype_test, T>;
56 template<
typename T,
typename Default>
60 template<
typename Value,
typename Constructor,
typename ParseState,
62 [[maybe_unused]] DAW_ATTRIB_FLATINLINE
static inline constexpr
auto
67 if constexpr( ParseState::has_allocator ) {
69 typename ParseState::template allocator_type_as<Value>;
70 auto alloc =
parse_state.get_allocator_for( template_arg<Value> );
71 if constexpr( std::is_invocable<Constructor, Args...,
73 return Constructor{ }( DAW_FWD2( Args, args )...,
75 }
else if constexpr( daw::traits::is_callable_v<Constructor,
78 return Constructor{ }( std::allocator_arg, DAW_MOVE( alloc ),
79 DAW_FWD2( Args, args )... );
82 std::is_invocable<Constructor, Args...>::value,
83 "Unable to construct value with the supplied arguments" );
84 return Constructor{ }( DAW_FWD2( Args, args )... );
88 std::is_invocable<Constructor, Args...>::value,
89 "Unable to construct value with the supplied arguments" );
90 if constexpr( std::is_invocable<Constructor, Args...>::value ) {
91 return Constructor{ }( DAW_FWD2( Args, args )... );
96 template<
typename Constructor>
98 template<
typename... TArgs, std::size_t... Is>
99 DAW_ATTRIB_FLATINLINE
inline constexpr decltype(
auto )
100 operator( )( fwd_pack<TArgs...> &&tp,
101 std::index_sequence<Is...> )
const {
102 return Constructor{ }( get<Is>( DAW_MOVE( tp ) )... );
105 template<
typename... TArgs,
typename Allocator, std::size_t... Is>
106 DAW_ATTRIB_FLATINLINE
inline constexpr decltype(
auto )
107 operator( )( fwd_pack<TArgs...> &&tp, Allocator &alloc,
108 std::index_sequence<Is...> )
const {
109 return Constructor{ }( get<Is>( DAW_MOVE( tp ) )...,
110 DAW_FWD2( Allocator, alloc ) );
113 template<
typename Alloc,
typename... TArgs, std::size_t... Is>
114 DAW_ATTRIB_FLATINLINE
inline constexpr decltype(
auto )
115 operator( )( std::allocator_arg_t, Alloc &&alloc,
116 fwd_pack<TArgs...> &&tp,
117 std::index_sequence<Is...> )
const {
119 return Constructor{ }( std::allocator_arg, DAW_FWD2( Alloc, alloc ),
120 get<Is>( DAW_MOVE( tp ) )... );
124 template<
typename Constructor>
128 template<
typename Value,
typename Constructor,
typename ParseState,
130 [[maybe_unused]] DAW_ATTRIB_FLATINLINE
static inline constexpr
auto
132 fwd_pack<Args...> &&tp_args ) {
133 if constexpr( ParseState::has_allocator ) {
135 typename ParseState::template allocator_type_as<Value>;
136 auto alloc =
parse_state.get_allocator_for( template_arg<Value> );
137 if constexpr( std::is_invocable<Constructor, Args...,
139 return construct_value_tp_invoke<Constructor>(
140 DAW_MOVE( tp_args ), DAW_MOVE( alloc ),
141 std::index_sequence_for<Args...>{ } );
142 }
else if constexpr( daw::traits::is_callable_v<Constructor,
143 std::allocator_arg_t,
144 alloc_t, Args...> ) {
145 return construct_value_tp_invoke<Constructor>(
146 std::allocator_arg, DAW_MOVE( alloc ), DAW_MOVE( tp_args ),
147 std::index_sequence_for<Args...>{ } );
150 std::is_invocable<Constructor, Args...>::value,
151 "Unable to construct value with the supplied arguments" );
152 return construct_value_tp_invoke<Constructor>(
153 DAW_MOVE( tp_args ), std::index_sequence_for<Args...>{ } );
159 std::is_invocable<Constructor, Args...>::value,
160 "Unable to construct value with the supplied arguments" );
161 return construct_value_tp_invoke<Constructor>(
162 DAW_MOVE( tp_args ), std::index_sequence_for<Args...>{ } );
166 template<
typename Allocator>
168 decltype( std::declval<Allocator &>( ).allocate(
size_t{ 1 } ) );
170 template<
typename Allocator>
172 decltype( std::declval<Allocator &>( ).deallocate(
173 static_cast<void *
>(
nullptr ),
size_t{ 1 } ) );
175 template<
typename Allocator>
177 daw::is_detected<has_allocate_test, Allocator>,
178 daw::is_detected<has_deallocate_test, Allocator>>::value;
182 not_trait<std::is_same<missing_json_data_contract_for<T>,
188 template<
typename Container,
typename Value>
190 std::declval<Value>( ) ) );
192 template<
typename Container,
typename Value>
194 std::end( std::declval<Container &>( ) ), std::declval<Value>( ) ) );
196 template<
typename Container,
typename Value>
198 daw::is_detected<detect_push_back, Container, Value>::value;
200 template<
typename Container,
typename Value>
202 daw::is_detected<detect_insert_end, Container, Value>::value;
204 template<
typename JsonMember>
207 template<
typename JsonMember>
210 template<
typename Container>
222 template<
typename Value>
223 DAW_ATTRIB_FLATINLINE
inline constexpr
void
224 operator( )( Value &&value )
const {
226 daw::remove_cvref_t<Value>> ) {
227 m_container->push_back( DAW_FWD2( Value, value ) );
229 daw::remove_cvref_t<Value>> ) {
231 DAW_FWD2( Value, value ) );
236 "basic_appender requires a Container that either has push_back "
238 "insert with the end iterator as first argument" );
245 not std::is_same<basic_appender, daw::remove_cvref_t<Value>>::value,
246 std::nullptr_t> =
nullptr>
248 operator( )( DAW_FWD2( Value, v ) );
271 daw::is_detected<json_parser_to_json_data_t, T>::value;
279 daw::is_detected<is_submember_tagged_variant_t, T>::value;
287 template<
typename JsonType>
289 std::bool_constant<JsonType::expected_type == JsonParseTypes::Null>;
291 template<
typename JsonType>
297 daw::remove_cvref_t<decltype( *( std::declval<T &>( ) ) )>;
301 typename daw::detected_or<T, dereffed_type_impl, T>::type;
303 template<
typename T, JsonNullable Nullable>
305 typename std::conditional_t<is_nullable_json_value_v<Nullable>,
312 template<
json_options_t CurrentOptions,
auto option,
auto... options>
316 template<
json_options_t CurrentOptions,
auto option,
auto... options>
320 template<
json_options_t CurrentOptions,
auto option,
auto... options>
324 template<
json_options_t CurrentOptions,
auto option,
auto... options>
328 template<
json_options_t CurrentOptions,
auto option,
auto... options>
332 template<
json_options_t CurrentOptions,
auto option,
auto... options>
336 template<
json_options_t CurrentOptions,
auto option,
auto... options>
341 namespace json_base {
342 template<
typename T,
typename Constructor = default_constructor<T>,
343 json_details::json_options_t Options =
class_opts_def>
346 template<
typename T,
typename Constructor = nullable_constructor<T>,
347 json_details::json_options_t Options =
class_opts_def>
350 json_details::class_opts_set<Options, JsonNullDefault>>;
352 template<
typename JsonElement,
typename Container,
357 template<
typename JsonElement,
typename Container,
371 T, json_details::string_raw_opts_set<Options, JsonNullDefault>,
408 template<
typename Container,
typename JsonValueType,
typename JsonKeyType,
413 template<
typename Container,
typename JsonValueType,
typename JsonKeyType,
416 json_key_value<Container, JsonValueType, JsonKeyType, Constructor,
419 template<
typename Tuple,
424 template<
typename Tuple,
429 json_details::tuple_opts_set<Options, JsonNullDefault>>;
441 template<
typename T,
typename Constructor = default_constructor<T>,
442 JsonNullable Nullable = JsonNullable::MustExist>
454 template<
typename T,
typename Constructor = nullable_constructor<T>>
458 namespace json_details {
461 typename std::bool_constant<daw::is_detected_v<dereffed_type_impl, T>>;
471 static_assert( daw::is_arithmetic<T>::value,
"Unexpected non-number" );
472 if constexpr( daw::is_floating_point<T>::value ) {
474 }
else if constexpr( daw::is_signed<T>::value ) {
476 }
else if constexpr( daw::is_unsigned<T>::value ) {
485 return number_parse_type_impl_v<std::underlying_type_t<T>>;
491 return number_parse_type_impl_v<T>;
498 template<
typename,
typename =
void>
506 template<
typename JsonType>
508 JsonType, std::enable_if_t<json_details::is_a_json_type_v<JsonType>>> {
509 static constexpr
bool is_null =
false;
512 using type = JsonType;
517 struct json_deduced_type_map<
518 T, std::enable_if_t<json_details::has_json_data_contract_trait_v<T>>> {
519 static constexpr
bool is_null =
false;
536 static constexpr
bool is_null =
false;
543 struct json_deduced_type_map<std::string> {
544 static constexpr
bool is_null =
false;
561 #if defined( _LIBCPP_VERSION )
564 typename std::vector<bool>::const_reference> {
565 static constexpr
bool is_null =
false;
572 template<
typename Integer>
573 struct json_deduced_type_map<
575 std::enable_if_t<std::conjunction_v<
576 not_trait<json_details::has_json_data_contract_trait<Integer>>,
577 daw::is_integral<Integer>>>> {
578 static constexpr
bool is_null =
false;
586 template<
typename Enum>
587 struct json_deduced_type_map<
588 Enum, std::enable_if_t<std::conjunction_v<
589 not_trait<json_details::has_json_data_contract_trait<Enum>>,
590 std::is_enum<Enum>>>> {
591 static constexpr
bool is_null =
false;
593 daw::is_signed_v<std::underlying_type<Enum>>
600 template<
typename FloatingPo
int>
601 struct json_deduced_type_map<
603 std::enable_if_t<std::conjunction_v<
604 not_trait<json_details::has_json_data_contract_trait<FloatingPoint>>,
605 daw::is_floating_point<FloatingPoint>>>> {
606 static constexpr
bool is_null =
false;
612 template<
typename Tuple>
613 struct json_deduced_type_map<
614 Tuple, std::enable_if_t<std::conjunction_v<
615 not_trait<json_details::has_json_data_contract_trait<Tuple>>,
617 static constexpr
bool is_null =
false;
623 namespace container_detect {
627 template<
typename Container>
629 decltype( std::begin( std::declval<Container const &>( ) ) );
631 template<
typename Container>
633 decltype( std::end( std::declval<Container const &>( ) ) );
637 std::conjunction_v<daw::is_detected<container_value_type, T>,
638 daw::is_detected<container_begin_type, T>,
639 daw::is_detected<container_end_type, T>>;
641 template<
typename AssociativeContainer>
644 template<
typename AssociativeContainer>
646 typename AssociativeContainer::mapped_type;
654 daw::is_detected<container_detect::container_value_type, T>,
655 daw::is_detected<container_detect::container_begin_type, T>,
656 daw::is_detected<container_detect::container_end_type, T>>;
658 template<
typename Container>
661 template<
typename String>
663 std::conjunction<is_container<String>,
666 template<
typename String>
669 template<
typename AssociativeContainer>
673 AssociativeContainer>,
675 AssociativeContainer>>;
677 template<
typename AssociativeContainer>
681 template<
typename AssociativeContainer>
683 AssociativeContainer,
684 std::enable_if_t<std::conjunction_v<
685 not_trait<has_json_data_contract_trait<AssociativeContainer>>,
686 is_associative_container<AssociativeContainer>>>> {
688 static constexpr
bool is_null =
false;
689 using key =
typename AssociativeContainer::key_type;
690 using value =
typename AssociativeContainer::mapped_type;
696 template<
typename Container>
697 struct json_deduced_type_map<
698 Container, std::enable_if_t<std::conjunction_v<
699 not_trait<has_json_data_contract_trait<Container>>,
700 not_trait<is_associative_container<Container>>,
701 json_details::is_container<Container>,
702 not_trait<is_string<Container>>>>> {
704 static constexpr
bool is_null =
false;
705 using value =
typename Container::value_type;
712 struct json_deduced_type_map<
714 std::enable_if_t<std::conjunction_v<
715 not_trait<has_json_data_contract_trait<std::optional<T>>>,
716 daw::is_detected<json_deduced_type_map, T>>>> {
718 static constexpr
bool is_null =
true;
719 using type = json_deduced_type_map<T>;
729 template<
typename Mapped,
bool Found = true>
736 if constexpr( is_a_json_type_v<T> ) {
738 }
else if constexpr( has_deduced_type_mapping_v<T> ) {
740 constexpr
auto mapped_type = mapped_type_t::parse_type;
785 using b_t =
typename mapped_type_t::base_type;
786 using k_t =
typename b_t::key;
787 using v_t =
typename b_t::value;
791 using k_t =
typename mapped_type_t::key;
792 using v_t =
typename mapped_type_t::value;
798 using b_t =
typename mapped_type_t::base_type;
799 using v_t =
typename b_t::value;
803 using v_t =
typename mapped_type_t::value;
829 typename decltype( json_link_quick_map<T>( ) )::mapped_type;
831 namespace vector_detect {
835 static constexpr
bool value =
false;
839 template<
typename T,
typename Alloc>
841 static constexpr
bool value =
true;
851 std::bool_constant<vector_detect::vector_test<T>::value>;
853 template<
typename JsonType>
856 template<
typename JsonType>
858 using type =
typename JsonType::json_member;
861 template<
typename JsonType>
863 daw::is_detected_v<is_json_class_map_test, JsonType>;
865 template<
typename T,
bool Contract,
bool JsonType,
bool QuickMap,
871 template<
typename T,
bool JsonType,
bool QuickMap,
875 static_assert( not std::is_same_v<T, void> );
878 static_assert( not std::is_same_v<daw::remove_cvref_t<type>,
void>,
879 "Detection failure" );
881 not std::is_same_v<daw::remove_cvref_t<type>, daw::nonesuch>,
882 "Detection failure" );
886 bool QuickMap,
bool Container>
888 static_assert( not std::is_same_v<T, void> );
890 typename std::conditional_t<is_json_class_map_v<T>,
892 daw::traits::identity<T>>
::type;
893 static_assert( not std::is_same_v<daw::remove_cvref_t<type>,
void>,
894 "Detection failure" );
896 not std::is_same_v<daw::remove_cvref_t<type>, daw::nonesuch>,
897 "Detection failure" );
900 template<
typename T ,
903 static_assert( not std::is_same_v<T, void> );
905 static_assert( not std::is_same_v<daw::remove_cvref_t<type>,
void>,
906 "Detection failure" );
908 not std::is_same_v<daw::remove_cvref_t<type>, daw::nonesuch>,
909 "Detection failure" );
910 static_assert( not std::is_same_v<daw::remove_cvref_t<type>,
void>,
911 "Detection failure" );
917 static_assert( not std::is_same_v<T, void> );
919 static_assert( not std::is_same_v<daw::remove_cvref_t<type>,
void>,
920 "Detection failure" );
922 not std::is_same_v<daw::remove_cvref_t<type>, daw::nonesuch>,
923 "Detection failure" );
924 static_assert( not std::is_same_v<daw::remove_cvref_t<type>,
void>,
925 "Detection failure" );
930 T, has_json_data_contract_trait_v<T>, json_details::is_a_json_type_v<T>,
931 has_json_link_quick_map_v<T>, is_container_v<T>>::type;
941 template<
typename JsonMember>
944 template<
typename Constructor,
typename... Members>
946 Constructor{ }( std::declval<typename Members::parse_to_t &&>( )... ) );
948 template<
typename Constructor,
typename... Members>
952 template<
typename Constructor,
typename... Members>
956 template<
typename Constructor,
typename... Members>
958 std::is_invocable_v<Constructor,
typename Members::parse_to_t...>;
960 template<
typename JsonMember>
963 template<
typename JsonMember>
965 daw::is_detected_v<dependent_member_t, JsonMember>;
ParseState & parse_state
Definition: daw_json_parse_class.h:201
typename AssociativeContainer::key_type container_key_type
Definition: daw_json_parse_common.h:642
typename AssociativeContainer::mapped_type container_mapped_type
Definition: daw_json_parse_common.h:646
typename T::value_type container_value_type
Definition: daw_json_parse_common.h:625
decltype(std::begin(std::declval< Container const & >())) container_begin_type
Definition: daw_json_parse_common.h:629
std::is_same< char, container_value_type< T > > is_value_type_char
Definition: daw_json_parse_common.h:649
constexpr bool container_detect_v
Definition: daw_json_parse_common.h:636
decltype(std::end(std::declval< Container const & >())) container_end_type
Definition: daw_json_parse_common.h:633
typename vector_test< T >::type vector_test_t
Definition: daw_json_parse_common.h:846
decltype(std::declval< Container & >().push_back(std::declval< Value >())) detect_push_back
Definition: daw_json_parse_common.h:190
typename daw::detected_or< T, dereffed_type_impl, T >::type dereffed_type
Definition: daw_json_parse_common.h:301
std::bool_constant< JsonType::expected_type==JsonParseTypes::Null > is_json_nullable
Definition: daw_json_parse_common.h:289
typename T::json_member ordered_member_subtype_test
Definition: daw_json_parse_common.h:50
constexpr bool has_json_to_json_data_v
Definition: daw_json_parse_common.h:270
constexpr bool has_json_data_contract_trait_v
Definition: daw_json_parse_common.h:185
decltype(std::declval< Allocator & >().allocate(size_t{ 1 })) has_allocate_test
Definition: daw_json_parse_common.h:168
decltype(Constructor{ }(std::declval< typename Members::parse_to_t && >()...)) json_class_parse_result_impl2
Definition: daw_json_parse_common.h:946
std::conjunction< is_container< AssociativeContainer >, daw::is_detected< container_detect::container_key_type, AssociativeContainer >, daw::is_detected< container_detect::container_mapped_type, AssociativeContainer > > is_associative_container
Definition: daw_json_parse_common.h:675
typename json_type_deducer< T, has_json_data_contract_trait_v< T >, json_details::is_a_json_type_v< T >, has_json_link_quick_map_v< T >, is_container_v< T > >::type json_deduced_type
Definition: daw_json_parse_common.h:931
decltype(json_link_quick_map< T >()) has_json_link_quick_map
Definition: daw_json_parse_common.h:818
constexpr json_options_t string_opts_set
Definition: daw_json_parse_common.h:325
daw::not_trait< std::is_same< json_deduced_type< T >, missing_json_data_contract_for< T > >> has_json_deduced_type
Definition: daw_json_parse_common.h:935
constexpr JsonParseTypes number_parse_type_v
Definition: daw_json_parse_common.h:496
constexpr json_options_t tuple_opts_set
Definition: daw_json_parse_common.h:337
constexpr json_options_t bool_opts_set
Definition: daw_json_parse_common.h:321
typename std::bool_constant< daw::is_detected_v< dereffed_type_impl, T > > can_deref
Definition: daw_json_parse_common.h:461
constexpr bool has_push_back_v
Definition: daw_json_parse_common.h:197
constexpr bool has_unnamed_default_type_mapping_v
Definition: daw_json_parse_common.h:938
constexpr bool has_dependent_member_v
Definition: daw_json_parse_common.h:964
constexpr auto json_link_quick_map()
Definition: daw_json_parse_common.h:735
constexpr json_options_t set_bits(JsonOptionList< OptionList... >, json_options_t value, Option pol, Options... pols)
Definition: daw_json_option_bits.h:138
typename daw::detected_or_t< T, ordered_member_subtype_test, T > ordered_member_subtype_t
Definition: daw_json_parse_common.h:54
typename std::conditional_t< daw::is_detected< json_data_contract_constructor_t, T >::value, json_data_contract_constructor< T >, daw::traits::identity< Default > >::type json_class_constructor_t
Definition: daw_json_traits.h:484
typename JsonType::json_member is_json_class_map_test
Definition: daw_json_parse_common.h:854
daw::detected_t< json_class_parse_result_impl2, Constructor, Members... > json_class_parse_result_impl
Definition: daw_json_parse_common.h:950
std::conjunction< is_container< String >, container_detect::is_value_type_char< String > > is_string
Definition: daw_json_parse_common.h:664
constexpr auto number_parse_type_test() -> std::enable_if_t< std::is_enum< T >::value, JsonParseTypes >
Definition: daw_json_parse_common.h:482
typename decltype(json_link_quick_map< T >())::mapped_type json_link_quick_map_t
Definition: daw_json_parse_common.h:829
std::conjunction< daw::is_detected< container_detect::container_value_type, T >, daw::is_detected< container_detect::container_begin_type, T >, daw::is_detected< container_detect::container_end_type, T > > is_container
Definition: daw_json_parse_common.h:656
daw::remove_cvref_t< decltype(*(std::declval< T & >()))> dereffed_type_impl
Definition: daw_json_parse_common.h:297
static constexpr DAW_ATTRIB_FLATINLINE auto construct_value_tp(ParseState &parse_state, fwd_pack< Args... > &&tp_args)
Definition: daw_json_parse_common.h:131
constexpr bool is_allocator_v
Definition: daw_json_parse_common.h:176
constexpr auto json_class_constructor
Definition: daw_json_parse_common.h:57
constexpr bool is_string_v
Definition: daw_json_parse_common.h:667
typename JsonMember::dependent_member dependent_member_t
Definition: daw_json_parse_common.h:961
std::uint32_t json_options_t
Definition: daw_json_option_bits.h:23
constexpr bool has_deduced_type_mapping_v
Definition: daw_json_parse_common.h:726
decltype(json_data_contract< T >::to_json_data(std::declval< T & >())) json_parser_to_json_data_t
Definition: daw_json_parse_common.h:267
json_result< json_deduced_type< JsonMember > > from_json_result_t
Definition: daw_json_parse_common.h:942
constexpr bool is_submember_tagged_variant_v
Definition: daw_json_parse_common.h:278
typename json_data_contract< T >::type::i_am_a_submember_tagged_variant is_submember_tagged_variant_t
Definition: daw_json_parse_common.h:275
decltype(std::declval< Container & >().insert(std::end(std::declval< Container & >()), std::declval< Value >())) detect_insert_end
Definition: daw_json_parse_common.h:194
std::bool_constant< vector_detect::vector_test< T >::value > is_vector
Definition: daw_json_parse_common.h:851
constexpr bool has_insert_end_v
Definition: daw_json_parse_common.h:201
constexpr json_options_t string_raw_opts_set
Definition: daw_json_parse_common.h:329
constexpr std::size_t parse_space_needed_v< simd_exec_tag >
Definition: daw_json_parse_common.h:285
constexpr JsonParseTypes number_parse_type_impl_v
Definition: daw_json_parse_common.h:470
constexpr bool is_container_v
Definition: daw_json_parse_common.h:659
constexpr auto construct_value_tp_invoke
Definition: daw_json_parse_common.h:125
decltype(std::declval< Allocator & >().deallocate(static_cast< void * >(nullptr), size_t{ 1 })) has_deallocate_test
Definition: daw_json_parse_common.h:173
constexpr json_options_t number_opts_set
Definition: daw_json_parse_common.h:317
constexpr bool is_associative_container_v
Definition: daw_json_parse_common.h:678
static constexpr DAW_ATTRIB_FLATINLINE auto construct_value(template_params< Value, Constructor >, ParseState &parse_state, Args &&...args)
Definition: daw_json_parse_common.h:63
constexpr std::size_t parse_space_needed_v
Definition: daw_json_parse_common.h:282
constexpr bool is_null(std::optional< T > const &v)
Definition: to_daw_json_string.h:942
typename JsonMember::parse_to_t json_result
Definition: daw_json_parse_common.h:205
not_trait< std::is_same< missing_json_data_contract_for< T >, json_data_contract_trait_t< T > >> has_json_data_contract_trait
Definition: daw_json_parse_common.h:183
static constexpr bool is_json_nullable_v
Definition: daw_json_parse_common.h:292
constexpr bool can_deref_v
Definition: daw_json_parse_common.h:467
constexpr bool can_defer_construction_v
Definition: daw_json_parse_common.h:957
constexpr bool is_json_class_map_v
Definition: daw_json_parse_common.h:862
daw::remove_cvref_t< json_class_parse_result_impl< Constructor, Members... > > json_class_parse_result_t
Definition: daw_json_parse_common.h:954
daw::not_trait< can_deref< T > > cant_deref
Definition: daw_json_parse_common.h:464
typename std::conditional_t< is_nullable_json_value_v< Nullable >, dereffed_type< T >, T > unwrap_type
Definition: daw_json_parse_common.h:306
constexpr bool has_json_link_quick_map_v
Definition: daw_json_parse_common.h:821
constexpr json_options_t json_custom_opts_set
Definition: daw_json_parse_common.h:333
typename JsonMember::base_type json_base_type
Definition: daw_json_parse_common.h:208
constexpr json_options_t class_opts_set
Definition: daw_json_parse_common.h:313
constexpr json_details::json_options_t string_opts_def
Definition: daw_json_type_options.h:124
JsonParseTypes
Definition: daw_json_enums.h:19
constexpr auto bool_opts
Definition: daw_json_type_options.h:81
typename json_data_contract< T >::type json_data_contract_trait_t
Definition: daw_json_traits.h:133
constexpr auto string_raw_opts
Definition: daw_json_type_options.h:155
constexpr json_details::json_options_t tuple_opts_def
Definition: daw_json_type_options.h:179
JsonNullable
Definition: daw_json_enums.h:77
constexpr json_details::json_options_t class_opts_def
Definition: daw_json_type_options.h:168
constexpr json_details::json_options_t bool_opts_def
Definition: daw_json_type_options.h:82
constexpr auto tuple_opts
Definition: daw_json_type_options.h:178
constexpr json_details::json_options_t string_raw_opts_def
Definition: daw_json_type_options.h:156
constexpr JsonNullable JsonNullDefault
Definition: daw_json_enums.h:83
constexpr auto json_custom_opts
Definition: daw_json_type_options.h:212
constexpr auto class_opts
Definition: daw_json_type_options.h:167
constexpr auto string_opts
Definition: daw_json_type_options.h:123
constexpr json_details::json_options_t number_opts_def
Definition: daw_json_type_options.h:69
constexpr auto number_opts
Definition: daw_json_type_options.h:68
Definition: daw_from_json.h:22
Definition: daw_from_json.h:22
Definition: daw_json_traits.h:190
Definition: daw_json_link_types.h:1182
Definition: daw_json_link_types.h:475
Definition: daw_json_link_types.h:775
Definition: daw_json_link_types.h:1378
Definition: daw_json_link_types.h:353
Definition: daw_json_link_types.h:1696
Definition: daw_json_link_types.h:546
Definition: daw_json_link_types.h:635
Definition: daw_json_link_types.h:1605
Definition: daw_json_link_types.h:822
Definition: daw_json_traits.h:125
Definition: daw_json_parse_common.h:211
Container * m_container
Definition: daw_json_parse_common.h:217
value_type reference
Definition: daw_json_parse_common.h:213
constexpr basic_appender & operator*()
Definition: daw_json_parse_common.h:260
constexpr basic_appender(Container &container)
Definition: daw_json_parse_common.h:219
typename Container::value_type value_type
Definition: daw_json_parse_common.h:212
std::output_iterator_tag iterator_category
Definition: daw_json_parse_common.h:216
constexpr basic_appender & operator=(Value &&v)
Definition: daw_json_parse_common.h:247
constexpr basic_appender operator++(int)
Definition: daw_json_parse_common.h:256
constexpr basic_appender & operator++()
Definition: daw_json_parse_common.h:252
value_type const * pointer
Definition: daw_json_parse_common.h:214
std::ptrdiff_t difference_type
Definition: daw_json_parse_common.h:215
Definition: daw_json_parse_common.h:97
Definition: daw_json_parse_common.h:857
typename JsonType::json_member type
Definition: daw_json_parse_common.h:858
Definition: daw_json_parse_common.h:499
static constexpr JsonParseTypes parse_type
Definition: daw_json_parse_common.h:501
static constexpr bool is_null
Definition: daw_json_parse_common.h:500
static constexpr bool type_map_found
Definition: daw_json_parse_common.h:503
Definition: daw_json_parse_common.h:730
Mapped mapped_type
Definition: daw_json_parse_common.h:731
typename std::conditional_t< is_json_class_map_v< T >, json_class_map_type< T >, daw::traits::identity< T > >::type type
Definition: daw_json_parse_common.h:892
json_link_quick_map_t< T > type
Definition: daw_json_parse_common.h:904
Definition: daw_json_parse_common.h:867
missing_json_data_contract_for< T > type
Definition: daw_json_parse_common.h:868
Definition: daw_json_parse_common.h:834
Definition: daw_json_parse_common.h:833
static constexpr bool value
Definition: daw_json_parse_common.h:835
not_vector type
Definition: daw_json_parse_common.h:836
Definition: daw_json_traits.h:117
Definition: daw_json_traits.h:331
#define DAW_JSON_VER
Definition: version.h:11