19 #include <daw/cpp_17.h>
20 #include <daw/daw_arith_traits.h>
21 #include <daw/daw_fwd_pack_apply.h>
22 #include <daw/daw_traits.h>
23 #include <daw/daw_utility.h>
49 typename Constructor = default_constructor<T>,
62 typename Constructor = nullable_constructor<T>,
66 json_details::class_opts_set<Options, JsonNullDefault>>;
91 template<JSONNAMETYPE Name,
typename T = std::optional<
double>,
92 json_details::json_options_t Options = number_opts_def,
93 typename Constructor = nullable_constructor<T>>
96 json_details::number_opts_set<Options, JsonNullDefault>,
113 json_details::number_opts_set<Options, JsonRangeCheck::CheckForNarrowing>,
136 template<JSONNAMETYPE Name,
typename T = std::optional<
bool>,
137 json_details::json_options_t Options =
bool_opts_def,
138 typename Constructor = default_constructor<T>>
155 template<
JSONNAMETYPE Name,
typename String = std::string,
172 template<JSONNAMETYPE Name,
typename String = std::optional<std::
string>,
173 json_details::json_options_t Options =
string_opts_def,
174 typename Constructor = nullable_constructor<String>>
177 json_details::string_opts_set<Options, JsonNullDefault>,
195 template<
JSONNAMETYPE Name,
typename String = std::string,
214 template<JSONNAMETYPE Name,
typename String = std::optional<std::
string>,
215 json_details::json_options_t Options =
string_raw_opts_def,
216 typename Constructor = nullable_constructor<String>>
218 Name, String, json_details::string_raw_opts_set<Options, JsonNullDefault>,
229 template<JSONNAMETYPE Name,
typename T = std::optional<
double>,
230 json_details::json_options_t Options = number_opts_def,
231 typename Constructor = nullable_constructor<T>>
253 typename JsonValueType =
typename Container::mapped_type,
254 typename JsonKeyType = json_base::json_string<std::string>,
273 typename JsonValueType =
typename Container::mapped_type,
274 typename JsonKeyType =
typename Container::key_type,
277 json_key_value<Name, Container, JsonValueType, JsonKeyType, Constructor,
290 typename T = std::chrono::time_point<std::chrono::system_clock,
291 std::chrono::milliseconds>,
292 typename Constructor =
305 typename T = std::optional<std::chrono::time_point<
306 std::chrono::system_clock, std::chrono::milliseconds>>,
307 typename Constructor =
315 template<
typename... JsonElements>
319 fwd_pack<json_details::json_deduced_type<JsonElements>...>;
335 typename Container = std::vector<
353 typename Container = std::vector<
375 typename JsonValueType =
typename Container::mapped_type,
376 typename JsonKeyType =
typename Container::key_type,
396 typename JsonValueType =
typename Container::mapped_type,
397 typename JsonKeyType =
typename Container::key_type,
436 json_custom<Name, T, FromJsonConverter, ToJsonConverter,
437 json_details::json_custom_opts_set<Options, JsonNullDefault>>;
444 json_details::json_custom_opts_set<Options, JsonCustomTypes::Literal>>;
451 json_custom<Name, T, FromJsonConverter, ToJsonConverter,
455 namespace json_details {
457 template<JsonBaseParseTypes PT>
458 constexpr std::size_t
461 for(
auto const &pt : pts ) {
467 return daw::numeric_limits<std::size_t>::max( );
475 template<
typename... Ts>
480 template<
typename... Ts>
481 [[maybe_unused]] constexpr std::conditional_t<
482 std::conjunction<has_json_deduced_type<Ts>...>::value,
492 std::remove_reference_t<daw::detected_t<underlying_nullable_type, T>>;
496 daw::is_detected<underlying_nullable_type, T>::value;
502 template<JsonNullable,
typename>
505 template<JsonNullable Nullable,
typename Variant>
507 not is_nullable_json_value_v<Nullable> or not is_nullable_type<Variant>,
509 std::declval<Variant const *>( ) ) )>,
511 is_nullable_type<Variant>,
532 typename JsonElements =
549 typename JsonElements =
571 JSONNAMETYPE Name,
typename T,
typename TagMember,
typename Switcher,
579 JSONNAMETYPE Name,
typename JsonElement,
typename SizeMember,
580 typename Container = std::vector<
581 typename json_details::json_deduced_type<JsonElement>::parse_to_t>,
601 JSONNAMETYPE Name,
typename T,
typename TagMember,
typename Switcher,
602 typename JsonElements =
603 json_details::determine_variant_element_types<JsonNullDefault, T>,
620 json_details::tuple_opts_set<Options, JsonNullDefault>>;
622 namespace json_details {
625 static_assert( is_a_json_type_v<T>,
626 "The supplied type does not have a json_data_contract" );
#define JSONNAMETYPE
Definition: daw_json_name.h:107
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
std::conditional_t< not is_nullable_json_value_v< Nullable > or not is_nullable_type< Variant >, std::remove_reference_t< decltype(get_variant_type_list(std::declval< Variant const * >()))>, std::conditional_t< is_nullable_type< Variant >, std::remove_reference_t< decltype(get_variant_type_list(std::declval< detected_underlying_nullable_type< Variant > const * >()))>, cannot_deduce_variant_element_types< Nullable, Variant > >> determine_variant_element_types
Definition: daw_json_link_types_fwd.h:515
constexpr bool is_nullable_type
Definition: daw_json_link_types_fwd.h:495
constexpr std::conditional_t< std::conjunction< has_json_deduced_type< Ts >... >::value, json_variant_type_list< json_deduced_type< Ts >... >, missing_default_type_mapping< json_deduced_type< Ts >... > > get_variant_type_list(std::variant< Ts... > const *)
constexpr std::size_t find_json_element(std::initializer_list< JsonBaseParseTypes > pts)
Definition: daw_json_link_types_fwd.h:459
std::uint32_t json_options_t
Definition: daw_json_option_bits.h:23
std::remove_reference_t< daw::detected_t< underlying_nullable_type, T > > detected_underlying_nullable_type
Definition: daw_json_link_types_fwd.h:492
typename ensure_mapped< T >::type ensure_mapped_t
Definition: daw_json_link_types_fwd.h:631
constexpr json_options_t number_opts_set
Definition: daw_json_parse_common.h:317
decltype(*std::declval< T >()) underlying_nullable_type
Definition: daw_json_link_types_fwd.h:488
constexpr json_options_t json_custom_opts_set
Definition: daw_json_parse_common.h:333
constexpr json_details::json_options_t string_opts_def
Definition: daw_json_type_options.h:124
constexpr json_details::json_options_t json_custom_opts_def
Definition: daw_json_type_options.h:213
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 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 json_details::json_options_t number_opts_def
Definition: daw_json_type_options.h:69
Definition: daw_from_json.h:22
Definition: daw_json_link_types_iso8601.h:45
Definition: daw_json_link_types_iso8601.h:28
Definition: daw_json_traits.h:190
Definition: to_daw_json_string.h:210
Definition: to_daw_json_string.h:131
Definition: daw_json_link_types.h:1242
Definition: daw_json_link_types.h:518
Definition: daw_json_link_types.h:822
Definition: daw_json_link_types.h:1130
Definition: daw_json_link_types.h:750
Definition: daw_json_link_types_fwd.h:503
Definition: daw_json_link_types_fwd.h:624
T type
Definition: daw_json_link_types_fwd.h:627
Definition: daw_json_link_types_fwd.h:476
void i_am_variant_type_list
Definition: daw_json_link_types_fwd.h:477
Definition: daw_json_link_types_fwd.h:471
void i_am_variant_type_list
Definition: daw_json_link_types_fwd.h:472
Definition: daw_json_link_types.h:1566
Definition: daw_json_link_types.h:1453
Definition: daw_json_link_types.h:414
Definition: daw_json_link_types.h:1338
Definition: daw_json_link_types.h:603
Definition: daw_json_link_types.h:685
Definition: daw_json_link_types.h:1035
Definition: daw_json_link_types.h:1643
Definition: daw_json_link_types_fwd.h:316
fwd_pack< json_details::json_deduced_type< JsonElements >... > element_map_t
Definition: daw_json_link_types_fwd.h:319
void i_am_variant_type_list
Definition: daw_json_link_types_fwd.h:317
Definition: daw_json_link_types.h:941
Definition: daw_json_traits.h:331
#define DAW_JSON_VER
Definition: version.h:11