15 #include <daw/daw_attributes.h>
16 #include <daw/daw_string_view.h>
17 #include <daw/daw_traits.h>
18 #include <daw/daw_visit.h>
21 #include <string_view>
23 #include <type_traits>
32 template<
typename... JsonMembers>
37 "Only JSON Link mapping types can appear in a "
38 "json_member_list(e.g. json_number, json_string...)" );
42 "All members must have a name and not no_name in a "
54 template<
typename OutputIterator,
typename Value,
55 template<
class...>
class Tuple,
typename... Ts>
56 [[maybe_unused, nodiscard]]
static inline constexpr OutputIterator
57 serialize( OutputIterator
it, Tuple<Ts...>
const &args, Value
const &v ) {
59 sizeof...( Ts ) ==
sizeof...( JsonMembers ),
60 "The method to_json_data in the json_data_contract does not match "
61 "the mapping. The number of members is not the same." );
63 ( (not std::is_rvalue_reference_v<Ts>)and... ),
64 "The Tuple contains rvalue references. The values "
65 "passed are now dangling. daw::forward_nonrvalue_as_tuple in "
66 "<daw/daw_tuple_forward.h> can forward only non-rvalue refs and "
67 "store the temporaries" );
69 it, args, v, std::index_sequence_for<Ts...>{ } );
72 template<
typename Constructor>
84 template<
typename JsonClass,
typename ParseState>
86 nodiscard]] DAW_ATTRIB_FLATTEN
static inline constexpr json_details::
87 json_result<JsonClass>
89 static_assert( json_details::is_no_name_v<JsonClass> );
90 static_assert( json_details::is_a_json_type_v<JsonClass> );
92 typename JsonClass::base_type>,
95 parse_state, std::index_sequence_for<JsonMembers...>{ } );
99 template<
typename JsonMember>
104 static_assert( json_details::is_a_json_type_v<json_member>,
105 "Only JSON Link mapping types can appear in a "
106 "json_class_map(e.g. json_number, json_string...)" );
109 json_details::is_no_name_v<json_member>,
110 "The JSONMember cannot be named, it does not make sense in "
113 template<
typename OutputIterator,
typename Member,
typename Value>
114 [[maybe_unused, nodiscard]]
static inline constexpr OutputIterator
120 template<
typename Constructor>
124 template<
typename JsonClass,
typename ParseState>
126 nodiscard]] DAW_ATTRIB_FLATTEN
static constexpr json_details::
127 json_result<JsonClass>
129 static_assert( json_details::is_a_json_type_v<JsonClass> );
131 typename JsonClass::base_type>,
136 using Constructor =
typename JsonClass::constructor_t;
138 template_args<JsonClass, Constructor>,
parse_state,
139 json_details::parse_value<json_member, false>(
149 template<
typename... Members>
151 std::tuple<
typename Members::parse_to_t...>
members;
153 template<
typename... Ts>
155 :
members{ DAW_FWD2( Ts, values )... } {}
158 template<
typename... Members>
162 [[nodiscard, maybe_unused]]
static inline auto const &
174 template<std::
size_t Index,
typename JsonMember>
181 "Missing specialization of daw::json::json_data_contract for class "
182 "mapping or specialization of daw::json::json_link_basic_type_map" );
187 namespace json_details {
188 template<
typename JsonMember>
190 std::conditional_t<is_an_ordered_member_v<JsonMember>, JsonMember,
205 template<
typename... JsonMembers>
218 template<
typename OutputIterator,
typename Value,
219 template<
class...>
class Tuple,
typename... Ts>
220 [[maybe_unused, nodiscard]]
static inline constexpr OutputIterator
221 serialize( OutputIterator
it, Tuple<Ts...>
const &args, Value
const &v ) {
222 static_assert(
sizeof...( Ts ) ==
sizeof...( JsonMembers ),
223 "Argument count is incorrect" );
225 ( (not std::is_rvalue_reference_v<Ts>)and... ),
226 "The Tuple contains rvalue references. The values "
227 "passed are now dangling. daw::forward_nonrvalue_as_tuple in "
228 "<daw/daw_tuple_forward.h> can forward only non-rvalue refs and "
229 "store the temporaries" );
233 "Only value JSON types can be used" );
236 it, args, v, std::index_sequence_for<Ts...>{ } );
239 template<
typename Constructor>
252 template<
typename JsonClass,
typename ParseState>
258 typename JsonClass::base_type>,
262 template_args<JsonClass,
279 template<
typename TagMember,
typename Switcher,
typename... JsonClasses>
290 template<
typename OutputIterator,
typename Value>
291 [[maybe_unused, nodiscard]]
static inline constexpr OutputIterator
294 return daw::visit_nt( v, [&](
auto const &alternative ) {
295 using Alternative = daw::remove_cvref_t<decltype( alternative )>;
297 std::disjunction_v<std::is_same<Alternative, JsonClasses>...>,
298 "Unexpected alternative type" );
299 static_assert( json_details::has_json_to_json_data_v<Alternative>,
300 "Alternative type does not have a to_json_data_member "
301 "in it's json_data_contract specialization" );
308 template<
typename Constructor>
311 daw::traits::first_type<JsonClasses...>>>;
321 template<
typename JsonClass,
typename ParseState>
322 [[maybe_unused, nodiscard]]
static inline constexpr json_details::
323 from_json_result_t<JsonClass>
327 typename JsonClass::base_type>,
332 return Switcher{ }( std::get<0>(
338 ErrorReason::UnexpectedJSONVariantType );
350 namespace json_base {
352 typename Constructor>
360 json_details::get_bits_for<JsonNullable>(
number_opts, Options );
362 static_assert( traits::not_same<void, base_type>::value,
363 "Failed to detect base type" );
365 static_assert( daw::is_arithmetic<base_type>::value,
366 "json_number requires an arithmetic type" );
374 typename std::is_invocable_r<parse_to_t, Constructor>::type>,
375 "Default ctor of constructor must match that of base" );
379 get_parse_type_v<json_details::number_parse_type_v<base_type>,
383 json_details::number_parse_type_v<base_type>;
386 json_details::get_bits_for<LiteralAsStringOpt>(
number_opts,
390 json_details::get_bits_for<JsonRangeCheck>(
number_opts, Options );
395 template<JSONNAMETYPE NewName>
416 static constexpr daw::string_view
name = Name;
417 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
419 "For no_name mappings, use the json_number_no_name "
420 "variant without a name argument" );
423 template<JSONNAMETYPE NewName>
428 template<
typename T = double,
433 template<
typename T = std::optional<
double>,
434 json_details::json_options_t Options = number_opts_def,
435 typename Constructor = nullable_constructor<T>>
437 T, json_details::number_opts_set<Options, JsonNullDefault>, Constructor>;
447 template<
typename T = double,
452 json_details::number_opts_set<Options, JsonRangeCheck::CheckForNarrowing>,
463 template<
typename T = std::optional<
double>,
464 json_details::json_options_t Options = number_opts_def,
465 typename Constructor = nullable_constructor<T>>
472 namespace json_base {
474 typename Constructor>
479 json_details::get_bits_for<JsonNullable>(
bool_opts, Options );
483 static_assert( traits::not_same<void, base_type>::value,
484 "Failed to detect base type" );
492 get_parse_type_v<JsonParseTypes::Bool, nullable>;
497 json_details::get_bits_for<LiteralAsStringOpt>(
bool_opts, Options );
502 template<JSONNAMETYPE NewName>
520 static constexpr daw::string_view
name = Name;
521 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
523 "For no_name mappings, use the json_bool_no_name variant "
524 "without a name argument" );
527 template<JSONNAMETYPE NewName>
532 template<
typename T = bool,
537 template<
typename T = std::optional<
bool>,
538 json_details::json_options_t Options =
bool_opts_def,
539 typename Constructor = nullable_constructor<T>>
541 T, json_details::bool_opts_set<Options, JsonNullDefault>, Constructor>;
543 namespace json_base {
545 typename Constructor>
554 static_assert( traits::not_same<void, base_type>::value,
555 "Failed to detect base type" );
562 get_parse_type_v<JsonParseTypes::StringRaw, nullable>;
578 template<JSONNAMETYPE NewName>
606 static constexpr daw::string_view
name = Name;
607 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
609 "For no_name mappings, use the json_string_raw_no_name "
610 "variant without a name argument" );
613 template<JSONNAMETYPE NewName>
619 template<
typename T = std::string,
623 json_base::json_string_raw<T, Options, Constructor>;
625 template<
typename T = std::optional<std::
string>,
626 json_details::json_options_t Options =
string_raw_opts_def,
627 typename Constructor = nullable_constructor<T>>
629 T, json_details::string_raw_opts_set<Options, JsonNullDefault>,
632 namespace json_base {
634 typename Constructor>
638 json_details::get_bits_for<JsonNullable>(
string_opts, Options );
643 static_assert( traits::not_same<void, base_type>::value,
644 "Failed to detect base type" );
652 get_parse_type_v<JsonParseTypes::StringEscaped, nullable>;
656 json_details::get_bits_for<EmptyStringNull>(
string_opts, Options );
658 json_details::get_bits_for<EightBitModes>(
string_opts, Options );
663 template<JSONNAMETYPE NewName>
686 static constexpr daw::string_view
name = Name;
687 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
689 "For no_name mappings, use the json_string_no_name "
690 "variant of mapping type" );
693 template<JSONNAMETYPE NewName>
699 template<
typename T = std::string,
704 template<
typename T = std::optional<std::
string>,
705 json_details::json_options_t Options =
string_opts_def,
706 typename Constructor = nullable_constructor<T>>
708 T, json_details::string_opts_set<Options, JsonNullDefault>, Constructor>;
710 namespace json_base {
711 template<
typename T,
typename Constructor, JsonNullable Nullable>
718 static_assert( traits::not_same<void, base_type>::value,
719 "Failed to detect base type" );
727 get_parse_type_v<JsonParseTypes::Date, Nullable>;
734 template<JSONNAMETYPE NewName>
748 template<
JSONNAMETYPE Name,
typename T,
typename Constructor,
751 static constexpr daw::string_view
name = Name;
752 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
754 "For no_name mappings, use the json_date_no_name variant "
755 "without a name argument" );
758 template<JSONNAMETYPE NewName>
764 template<
typename T,
typename Constructor = default_constructor<T>,
765 JsonNullable Nullable = JsonNullable::MustExist>
768 template<
typename T,
typename Constructor = nullable_constructor<T>>
770 json_base::json_date<T, Constructor, JsonNullDefault>;
772 namespace json_base {
773 template<
typename T,
typename Constructor,
781 json_details::get_bits_for<JsonNullable>(
class_opts, Options );
786 static_assert( traits::not_same<void, base_type>::value,
787 "Failed to detect base type" );
793 daw::traits::identity<base_type>,
794 daw::traits::identity<
795 typename data_contract::template result_type<constructor_t>>>::type;
798 get_parse_type_v<JsonParseTypes::Class, nullable>;
804 template<JSONNAMETYPE NewName>
820 template<
JSONNAMETYPE Name,
typename T,
typename Constructor,
824 static constexpr daw::string_view
name = Name;
825 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
827 "For no_name mappings, use the json_class_no_name variant "
828 "without a name argument" );
830 template<JSONNAMETYPE NewName>
836 template<
typename T,
typename Constructor = default_constructor<T>,
837 json_details::json_options_t Options =
class_opts_def>
840 template<
typename T,
typename Constructor = nullable_constructor<T>,
841 json_details::json_options_t Options =
class_opts_def>
843 T, Constructor, json_details::class_opts_set<Options, JsonNullDefault>>;
850 template<
typename... JsonElements>
852 [[deprecated(
"Use json_variant_type list, removal in v4" )]] =
862 template<
typename... JsonElements>
866 sizeof...( JsonElements ) <= 5U,
867 "There can be at most 5 items, one for each JsonBaseParseTypes" );
872 "Missing specialization of daw::json::json_data_contract for class "
873 "mapping or specialization of daw::json::json_link_basic_type_map" );
875 static constexpr std::size_t base_map[5] = {
876 json_details::find_json_element<JsonBaseParseTypes::Number>(
878 JsonElements>::underlying_json_type... } ),
879 json_details::find_json_element<JsonBaseParseTypes::Bool>(
881 JsonElements>::underlying_json_type... } ),
882 json_details::find_json_element<JsonBaseParseTypes::String>(
884 JsonElements>::underlying_json_type... } ),
885 json_details::find_json_element<JsonBaseParseTypes::Class>(
887 JsonElements>::underlying_json_type... } ),
888 json_details::find_json_element<JsonBaseParseTypes::Array>(
890 JsonElements>::underlying_json_type... } ) };
893 namespace json_base {
894 template<
typename T,
typename JsonElements,
typename Constructor,
900 std::is_same<
typename JsonElements::i_am_variant_type_list,
902 "Expected a json_variant_type_list" );
907 static_assert( traits::not_same<void, base_type>::value,
908 "Failed to detect base type" );
912 get_parse_type_v<JsonParseTypes::Variant, Nullable>;
922 template<JSONNAMETYPE NewName>
938 template<
JSONNAMETYPE Name,
typename T,
typename JsonElements,
942 static constexpr daw::string_view
name = Name;
943 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
945 "For no_name mappings, use the json_variant_no_name "
946 "variant without a name argument" );
948 template<JSONNAMETYPE NewName>
956 template<
typename T,
typename JsonElements,
960 json_base::json_variant<T, JsonElements, Constructor,
963 template<
typename T,
typename JsonElements,
966 json_base::json_variant<T, JsonElements, Constructor, JsonNullDefault>;
968 namespace json_base {
969 template<
typename T,
typename TagMember,
typename Switcher,
970 typename JsonElements,
typename Constructor,
978 std::is_same<
typename JsonElements::i_am_variant_type_list,
980 "Expected a json_member_list" );
984 static_assert( json_details::is_a_json_type_v<TagMember>,
985 "The TagMember type must have a name and be a "
986 "member of the same object as this" );
989 "The TagMember nullability mullable type" );
996 static_assert( traits::not_same<void, base_type>::value,
997 "Failed to detect base type" );
1001 get_parse_type_v<JsonParseTypes::VariantTagged, Nullable>;
1008 template<JSONNAMETYPE NewName>
1011 JsonElements, Constructor,
Nullable>;
1030 template<
JSONNAMETYPE Name,
typename T,
typename TagMember,
1031 typename Switcher,
typename JsonElements,
typename Constructor,
1035 Constructor, Nullable> {
1037 static constexpr daw::string_view
name = Name;
1038 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
1041 "For no_name mappings, use the json_tagged_variant_no_name variant "
1042 "without a name argument" );
1045 template<JSONNAMETYPE NewName>
1055 template<
typename T,
typename TagMember,
typename Switcher,
1056 typename JsonElements = json_details::
1057 determine_variant_element_types<JsonNullable::MustExist, T>,
1061 json_base::json_tagged_variant<T, TagMember, Switcher, JsonElements,
1062 Constructor, Nullable>;
1064 template<
typename T,
typename TagMember,
typename Switcher,
1065 typename JsonElements = json_details::
1066 determine_variant_element_types<JsonNullable::MustExist, T>,
1069 json_base::json_tagged_variant<T, TagMember, Switcher, JsonElements,
1072 namespace json_base {
1073 template<
typename T,
typename FromJsonConverter,
typename ToJsonConverter,
1086 static_assert( traits::not_same<void, base_type>::value,
1087 "Failed to detect base type" );
1091 std::string_view>::type;
1094 std::is_invocable_v<ToJsonConverter, parse_to_t> or
1095 std::is_invocable_r<
char *, ToJsonConverter,
char *,
1097 "ToConverter must be callable with T or T and and OutputIterator" );
1100 get_parse_type_v<JsonParseTypes::Custom, nullable>;
1111 template<JSONNAMETYPE NewName>
1113 ToJsonConverter, Options>;
1127 template<
JSONNAMETYPE Name,
typename T,
typename FromJsonConverter,
1132 static constexpr daw::string_view
name = Name;
1133 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
1135 "For no_name mappings, use the json_custom_no_name "
1136 "variant without a name argument" );
1139 template<JSONNAMETYPE NewName>
1147 template<
typename T,
1152 json_base::json_custom<T, FromJsonConverter, ToJsonConverter, Options>;
1154 template<
typename T,
1159 T, FromJsonConverter, ToJsonConverter,
1160 json_details::json_custom_opts_set<Options, JsonCustomTypes::Literal>>;
1162 template<
typename T,
1167 T, FromJsonConverter, ToJsonConverter,
1168 json_details::json_custom_opts_set<Options, JsonNullDefault>>;
1170 template<
typename T,
1175 T, FromJsonConverter, ToJsonConverter,
1179 namespace json_base {
1180 template<
typename JsonElement,
typename Container,
typename Constructor,
1186 json_details::has_unnamed_default_type_mapping_v<JsonElement>,
1187 "Missing specialization of daw::json::json_data_contract for class "
1188 "mapping or specialization of daw::json::json_link_basic_type_map" );
1192 static_assert( traits::not_same_v<json_element_t, void>,
1193 "Unknown JsonElement type." );
1194 static_assert( json_details::is_a_json_type_v<json_element_t>,
1195 "Error determining element type" );
1199 static_assert( traits::not_same_v<void, base_type>,
1200 "Failed to detect base type" );
1210 get_parse_type_v<JsonParseTypes::Array, Nullable>;
1215 static_assert( json_element_t::name ==
no_name,
1216 "All elements of json_array must be have no_name" );
1221 template<JSONNAMETYPE NewName>
1239 template<
JSONNAMETYPE Name,
typename JsonElement,
typename Container,
1244 static constexpr daw::string_view
name = Name;
1245 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
1247 "For no_name mappings, use the json_array_no_name variant "
1248 "without a name argument" );
1250 template<JSONNAMETYPE NewName>
1259 typename JsonElement,
1260 typename Container = std::vector<
1265 json_base::json_array<JsonElement, Container, Constructor, Nullable>;
1268 typename JsonElement,
1269 typename Container = std::vector<
1270 typename json_details::json_deduced_type<JsonElement>::parse_to_t>,
1273 json_base::json_array<JsonElement, Container, Constructor,
1276 namespace json_base {
1277 template<
typename JsonElement,
typename SizeMember,
typename Container,
1284 json_details::has_unnamed_default_type_mapping_v<JsonElement>,
1285 "Missing specialization of daw::json::json_data_contract for class "
1286 "mapping or specialization of daw::json::json_link_basic_type_map" );
1289 static_assert( json_details::is_a_json_type_v<SizeMember>,
1290 "The SizeMember type must have a name and be a "
1291 "member of the same object as this" );
1294 "The SizeMember cannot be a nullable type" );
1299 static_assert( traits::not_same_v<json_element_t, void>,
1300 "Unknown JsonElement type." );
1301 static_assert( json_details::is_a_json_type_v<json_element_t>,
1302 "Error determining element type" );
1305 static_assert( traits::not_same_v<void, base_type>,
1306 "Failed to detect base type" );
1316 get_parse_type_v<JsonParseTypes::SizedArray, nullable>;
1321 static_assert( json_element_t::name ==
no_name,
1322 "All elements of json_array must be have no_name" );
1326 template<JSONNAMETYPE NewName>
1334 template<
JSONNAMETYPE Name,
typename JsonElement,
typename SizeMember,
1338 Constructor, Nullable> {
1340 static constexpr daw::string_view
name = Name;
1341 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
1344 "For no_name mappings, use the json_sized_array_no_name variant "
1345 "without a name argument" );
1347 template<JSONNAMETYPE NewName>
1357 typename JsonElement,
typename SizeMember,
1358 typename Container = std::vector<
1363 json_base::json_sized_array<JsonElement, SizeMember, Container,
1364 Constructor, Nullable>;
1367 typename JsonElement,
typename SizeMember,
1368 typename Container = std::vector<
1369 typename json_details::json_deduced_type<JsonElement>::parse_to_t>,
1372 json_base::json_sized_array<JsonElement, SizeMember, Container,
1375 namespace json_base {
1376 template<
typename Container,
typename JsonValueType,
typename JsonKeyType,
1385 static_assert( traits::not_same_v<void, base_type>,
1386 "Failed to detect base type" );
1389 json_details::has_unnamed_default_type_mapping_v<JsonValueType>,
1390 "Missing specialization of daw::json::json_data_contract for class "
1391 "mapping or specialization of daw::json::json_link_basic_type_map" );
1395 static_assert( traits::not_same_v<json_element_t, void>,
1396 "Unknown JsonValueType type." );
1397 static_assert( json_element_t::name ==
no_name,
1398 "Value member name must be the default no_name" );
1400 json_details::has_unnamed_default_type_mapping_v<JsonKeyType>,
1401 "Missing specialization of daw::json::json_data_contract for class "
1402 "mapping or specialization of daw::json::json_link_basic_type_map" );
1406 static_assert( traits::not_same_v<json_key_t, void>,
1407 "Unknown JsonKeyType type." );
1408 static_assert( json_details::is_no_name_v<json_key_t>,
1409 "Key member name must be the default no_name" );
1413 std::pair<
typename json_key_t::parse_to_t
const,
1414 typename json_element_t::parse_to_t>
const *,
1415 std::pair<
typename json_key_t::parse_to_t
const,
1416 typename json_element_t::parse_to_t>
const *>::type;
1420 get_parse_type_v<JsonParseTypes::KeyValue, Nullable>;
1427 template<JSONNAMETYPE NewName>
1430 JsonKeyType, Constructor,
Nullable>;
1449 template<
JSONNAMETYPE Name,
typename Container,
typename JsonValueType,
1453 Constructor, Nullable> {
1455 static constexpr daw::string_view
name = Name;
1456 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
1458 "For no_name mappings, use the json_key_value_no_name "
1459 "variant without a name argument" );
1462 template<JSONNAMETYPE NewName>
1464 JsonKeyType, Constructor,
Nullable>;
1470 template<
typename Container,
1471 typename JsonValueType =
typename Container::mapped_type,
1472 typename JsonKeyType =
typename Container::key_type,
1476 json_base::json_key_value<Container, JsonValueType, JsonKeyType,
1477 Constructor, Nullable>;
1479 template<
typename Container,
1480 typename JsonValueType =
typename Container::mapped_type,
1481 typename JsonKeyType =
typename Container::key_type,
1484 json_base::json_key_value<Container, JsonValueType, JsonKeyType,
1487 namespace json_base {
1488 template<
typename Container,
typename JsonValueType,
typename JsonKeyType,
1496 static_assert( traits::not_same_v<void, base_type>,
1497 "Failed to detect base type" );
1506 static_assert( traits::not_same_v<json_key_t, void>,
1507 "Unknown JsonKeyType type." );
1508 static_assert( daw::string_view( json_key_t::name ) !=
1510 "Must supply a valid key member name" );
1522 static_assert( traits::not_same_v<json_value_t, void>,
1523 "Unknown JsonValueType type." );
1524 static_assert( daw::string_view( json_value_t::name ) !=
1526 "Must supply a valid value member name" );
1527 static_assert( daw::string_view( json_key_t::name ) !=
1528 daw::string_view( json_value_t::name ),
1529 "Key and Value member names cannot be the same" );
1532 get_parse_type_v<JsonParseTypes::KeyValueArray, Nullable>;
1539 template<JSONNAMETYPE NewName>
1542 JsonKeyType, Constructor,
Nullable>;
1562 template<
JSONNAMETYPE Name,
typename Container,
typename JsonValueType,
1566 Constructor, Nullable> {
1568 static constexpr daw::string_view
name = Name;
1569 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
1572 "For no_name mappings, use the json_key_value_array_no_name variant "
1573 "without a name argument" );
1576 template<JSONNAMETYPE NewName>
1585 template<
typename Container,
1586 typename JsonValueType =
typename Container::mapped_type,
1587 typename JsonKeyType =
typename Container::key_type,
1591 json_base::json_key_value_array<Container, JsonValueType, JsonKeyType,
1592 Constructor, Nullable>;
1594 template<
typename Container,
1595 typename JsonValueType =
typename Container::mapped_type,
1596 typename JsonKeyType =
typename Container::key_type,
1599 json_base::json_key_value_array<Container, JsonValueType, JsonKeyType,
1602 namespace json_base {
1603 template<
typename Tuple,
typename Constructor,
1614 json_details::get_bits_for<JsonNullable>(
tuple_opts, Options );
1621 static_assert( traits::not_same<void, base_type>::value,
1622 "Failed to detect base type" );
1628 get_parse_type_v<JsonParseTypes::Tuple, nullable>;
1634 template<JSONNAMETYPE NewName>
1644 static constexpr daw::string_view
name = Name;
1645 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
1647 "For no_name mappings, use the json_tuple_no_name "
1648 "variant without a name argument" );
1651 template<JSONNAMETYPE NewName>
1657 template<
typename Tuple,
typename Constructor = default_constructor<Tuple>,
1658 json_details::json_options_t Options = tuple_opts_def>
1660 json_base::json_tuple<Tuple, Constructor, Options>;
1662 template<
typename Tuple,
typename Constructor = default_constructor<Tuple>,
1663 json_details::json_options_t Options = tuple_opts_def>
1666 json_details::tuple_opts_set<Options, JsonNullDefault>>;
1694 namespace json_base {
1695 template<
typename T,
typename Constructor, JsonNullable Nullable>
1703 static_assert( traits::not_same_v<void, base_type>,
1704 "Failed to detect base type" );
1708 char const *>::type;
1713 get_parse_type_v<JsonParseTypes::Unknown, nullable>;
1720 template<JSONNAMETYPE NewName>
1740 template<
JSONNAMETYPE Name,
typename T,
typename Constructor,
1743 static constexpr daw::string_view
name = Name;
1744 #if not defined( DAW_JSON_NO_FAIL_ON_NO_NAME_NAME )
1746 "For no_name mappings, use the json_raw_no_name "
1747 "variant without a name argument" );
1750 template<JSONNAMETYPE NewName>
1760 [[deprecated(
"Was renamed to json_raw, will be removed in v4" )]] =
1775 template<JSONNAMETYPE Name,
typename T = std::optional<json_value>,
1776 typename Constructor = nullable_constructor<T>>
1779 template<JSONNAMETYPE Name,
typename T = std::optional<json_value>,
1780 typename Constructor = nullable_constructor<T>>
1782 [[deprecated(
"Was renamed to json_raw_null, will be removed in v4" )]] =
1813 template<
typename T = std::optional<json_value>,
1814 typename Constructor = nullable_constructor<T>>
1816 json_base::json_raw<T, Constructor, JsonNullDefault>;
1818 template<
typename ParseState>
1827 template<JSONNAMETYPE Name,
typename T>
1829 json_details::json_deduced_type<T>>::template with_name<Name>;
1831 template<
typename T>
1833 json_details::ensure_mapped_t<json_details::json_deduced_type<T>>;
Definition: daw_json_value.h:316
#define daw_json_assert_weak(Bool,...)
Definition: daw_json_assert.h:189
#define JSONNAMETYPE
Definition: daw_json_name.h:107
ParseState & parse_state
Definition: daw_json_parse_class.h:201
Iterator & it
Definition: daw_json_traits.h:231
std::conditional_t< Nullable, std::conditional_t< std::is_invocable_v< Constructor, Args... >, std::conditional_t< std::is_invocable_v< Constructor >, std::invoke_result< Constructor >, traits::identity< nullable_constructor_cannot_be_invoked< Constructor > > >, traits::identity< nullable_constructor_cannot_be_invoked< Constructor, Args... > > >, std::conditional_t< std::is_invocable_v< Constructor, Args... >, std::invoke_result< Constructor, Args... >, traits::identity< constructor_cannot_be_invoked< Constructor, Args... > > > > construction_result
Definition: daw_json_traits.h:96
constexpr bool has_json_data_contract_trait_v
Definition: daw_json_parse_common.h:185
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
constexpr OutputIterator serialize_ordered_json_class(OutputIterator it, Tuple const &args, Value const &value, std::index_sequence< Is... >)
Definition: daw_json_serialize_impl.h:135
constexpr OutputIterator member_to_string(template_param< JsonMember >, OutputIterator it, T const &value)
Definition: to_daw_json_string.h:1259
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 char const default_value_name[]
Definition: daw_json_name.h:113
constexpr DAW_ATTRIB_FLATTEN json_result< JsonClass > parse_nth_class(std::size_t idx, ParseState &parse_state)
Definition: daw_json_parse_value.h:993
std::bool_constant< nullable !=JsonNullable::MustExist > is_nullable_json_value
Definition: daw_json_enums.h:88
std::conditional_t< is_an_ordered_member_v< JsonMember >, JsonMember, json_deduced_type< JsonMember > > ordered_member_wrapper
Definition: daw_json_link_types.h:191
std::bool_constant< daw::is_detected_v< json_type_t, T > > is_a_json_type
Definition: daw_json_traits.h:426
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
std::uint32_t json_options_t
Definition: daw_json_option_bits.h:23
std::bool_constant< JsonMember::name==no_name > is_no_name
Definition: daw_json_name.h:119
typename ensure_mapped< T >::type ensure_mapped_t
Definition: daw_json_link_types_fwd.h:631
copy_name_when< JsonMember, NewName, JsonMember::name==no_name > copy_name_when_noname
Definition: daw_json_traits.h:110
static constexpr json_result< JsonClass > parse_ordered_json_class(template_params< JsonClass, JsonMembers... >, ParseState &parse_state)
Definition: daw_json_parse_class.h:336
constexpr char const default_key_name[]
Definition: daw_json_name.h:112
constexpr json_options_t number_opts_set
Definition: daw_json_parse_common.h:317
constexpr OutputIterator serialize_json_class(OutputIterator it, Tuple const &args, Value const &value, std::index_sequence< Is... >)
Definition: daw_json_serialize_impl.h:86
static constexpr DAW_ATTRIB_FLATINLINE auto construct_value(template_params< Value, Constructor >, ParseState &parse_state, Args &&...args)
Definition: daw_json_parse_common.h:63
typename JsonMember::parse_to_t json_result
Definition: daw_json_parse_common.h:205
daw::remove_cvref_t< json_class_parse_result_impl< Constructor, Members... > > json_class_parse_result_t
Definition: daw_json_parse_common.h:954
typename std::conditional_t< is_nullable_json_value_v< Nullable >, dereffed_type< T >, T > unwrap_type
Definition: daw_json_parse_common.h:306
constexpr json_result< JsonClass > parse_json_class(ParseState &parse_state, std::index_sequence< Is... >)
Definition: daw_json_parse_class.h:238
constexpr json_options_t json_custom_opts_set
Definition: daw_json_parse_common.h:333
constexpr DAW_ATTRIB_INLINE json_result< JsonMember > parse_value(ParseState &parse_state, ParseTag< JsonParseTypes::Real >)
Definition: daw_json_parse_value.h:67
constexpr bool is_nullability_compatable_v
Definition: daw_json_traits.h:612
constexpr json_details::json_options_t string_opts_def
Definition: daw_json_type_options.h:124
EightBitModes
Definition: daw_json_type_options.h:104
JsonParseTypes
Definition: daw_json_enums.h:19
json_base::json_key_value< Container, JsonValueType, JsonKeyType, Constructor, Nullable > json_key_value_no_name
Definition: daw_json_link_types.h:1477
LiteralAsStringOpt
Definition: daw_json_type_options.h:38
json_base::json_class< T, Constructor, Options > json_class_no_name
Definition: daw_json_link_types.h:838
json_base::json_key_value< Container, JsonValueType, JsonKeyType, Constructor, JsonNullDefault > json_key_value_null_no_name
Definition: daw_json_link_types.h:1485
json_base::json_variant< T, JsonElements, Constructor, JsonNullDefault > json_variant_null_no_name
Definition: daw_json_link_types.h:966
constexpr json_details::json_options_t json_custom_opts_def
Definition: daw_json_type_options.h:213
constexpr auto bool_opts
Definition: daw_json_type_options.h:81
json_base::json_number< T, json_details::number_opts_set< Options, JsonRangeCheck::CheckForNarrowing, JsonNullDefault >, Constructor > json_checked_number_null_no_name
Definition: daw_json_link_types.h:470
json_base::json_custom< T, FromJsonConverter, ToJsonConverter, Options > json_custom_no_name
Definition: daw_json_link_types.h:1152
JsonCustomTypes
Definition: daw_json_type_options.h:197
typename json_data_contract< T >::type json_data_contract_trait_t
Definition: daw_json_traits.h:133
json_base::json_number< T, json_details::number_opts_set< Options, JsonRangeCheck::CheckForNarrowing >, Constructor > json_checked_number_no_name
Definition: daw_json_link_types.h:453
json_base::json_string_raw< T, json_details::string_raw_opts_set< Options, JsonNullDefault >, Constructor > json_string_raw_null_no_name
Definition: daw_json_link_types.h:630
json_base::json_key_value_array< Container, JsonValueType, JsonKeyType, Constructor, JsonNullDefault > json_key_value_array_null_no_name
Definition: daw_json_link_types.h:1600
json_base::json_bool< T, Options, Constructor > json_bool_no_name
Definition: daw_json_link_types.h:535
json_base::json_custom< T, FromJsonConverter, ToJsonConverter, json_details::json_custom_opts_set< Options, JsonCustomTypes::Literal, JsonNullDefault > > json_custom_lit_null_no_name
Definition: daw_json_link_types.h:1177
json_base::json_tuple< Tuple, Constructor, json_details::tuple_opts_set< Options, JsonNullDefault > > json_tuple_null_no_name
Definition: daw_json_link_types.h:1666
json_base::json_number< T, Options, Constructor > json_number_no_name
Definition: daw_json_link_types.h:431
json_base::json_tuple< Tuple, Constructor, Options > json_tuple_no_name
Definition: daw_json_link_types.h:1660
json_base::json_array< JsonElement, Container, Constructor, JsonNullDefault > json_array_null_no_name
Definition: daw_json_link_types.h:1274
json_base::json_variant< T, JsonElements, Constructor, JsonNullable::MustExist > json_variant_no_name
Definition: daw_json_link_types.h:961
constexpr auto string_raw_opts
Definition: daw_json_type_options.h:155
json_base::json_date< T, Constructor, JsonNullDefault > json_date_null_no_name
Definition: daw_json_link_types.h:770
json_base::json_array< JsonElement, Container, Constructor, Nullable > json_array_no_name
Definition: daw_json_link_types.h:1265
json_base::json_bool< T, json_details::bool_opts_set< Options, JsonNullDefault >, Constructor > json_bool_null_no_name
Definition: daw_json_link_types.h:541
std::integral_constant< JsonParseTypes, v > ParseTag
Definition: daw_json_enums.h:106
json_details::ensure_mapped_t< json_details::json_deduced_type< T > > json_link_no_name
Definition: daw_json_link_types.h:1833
json_base::json_tagged_variant< T, TagMember, Switcher, JsonElements, Constructor, JsonNullDefault > json_tagged_variant_null_no_name
Definition: daw_json_link_types.h:1070
JsonNullable
Definition: daw_json_enums.h:77
json_base::json_raw< T, Constructor, Nullable > json_raw_no_name
Definition: daw_json_link_types.h:1800
json_base::json_string< T, Options, Constructor > json_string_no_name
Definition: daw_json_link_types.h:702
json_base::json_sized_array< JsonElement, SizeMember, Container, Constructor, Nullable > json_sized_array_no_name
Definition: daw_json_link_types.h:1364
constexpr char const no_name[]
Definition: daw_json_name.h:109
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
json_base::json_number< T, json_details::number_opts_set< Options, JsonNullDefault >, Constructor > json_number_null_no_name
Definition: daw_json_link_types.h:437
json_base::json_string< T, json_details::string_opts_set< Options, JsonNullDefault >, Constructor > json_string_null_no_name
Definition: daw_json_link_types.h:708
typename json_details::ensure_mapped_t< json_details::json_deduced_type< T > >::template with_name< Name > json_link
Definition: daw_json_link_types.h:1829
JsonBaseParseTypes
Definition: daw_json_enums.h:40
AllowEscapeCharacter
Definition: daw_json_type_options.h:136
json_base::json_key_value_array< Container, JsonValueType, JsonKeyType, Constructor, Nullable > json_key_value_array_no_name
Definition: daw_json_link_types.h:1592
json_base::json_class< T, Constructor, json_details::class_opts_set< Options, JsonNullDefault > > json_class_null_no_name
Definition: daw_json_link_types.h:843
std::bool_constant< std::disjunction_v< daw::is_detected< json_details::force_aggregate_construction_test, T >, daw::is_detected< json_details::force_aggregate_construction_test2, T > >> force_aggregate_construction
Definition: daw_json_traits.h:174
EmptyStringNull
Definition: daw_json_type_options.h:93
constexpr auto tuple_opts
Definition: daw_json_type_options.h:178
JsonRangeCheck
Definition: daw_json_type_options.h:52
constexpr json_details::json_options_t string_raw_opts_def
Definition: daw_json_type_options.h:156
json_base::json_raw< T, Constructor, JsonNullDefault > json_raw_null_no_name
Definition: daw_json_link_types.h:1816
constexpr JsonNullable JsonNullDefault
Definition: daw_json_enums.h:83
json_base::json_custom< T, FromJsonConverter, ToJsonConverter, json_details::json_custom_opts_set< Options, JsonNullDefault > > json_custom_null_no_name
Definition: daw_json_link_types.h:1168
constexpr auto json_custom_opts
Definition: daw_json_type_options.h:212
json_base::json_tagged_variant< T, TagMember, Switcher, JsonElements, Constructor, Nullable > json_tagged_variant_no_name
Definition: daw_json_link_types.h:1062
json_base::json_date< T, Constructor, Nullable > json_date_no_name
Definition: daw_json_link_types.h:766
basic_json_value< NoCommentSkippingPolicyChecked > json_value
Definition: daw_json_link_types.h:1671
constexpr auto class_opts
Definition: daw_json_type_options.h:167
constexpr auto string_opts
Definition: daw_json_type_options.h:123
json_base::json_sized_array< JsonElement, SizeMember, Container, Constructor, JsonNullDefault > json_sized_array_null_no_name
Definition: daw_json_link_types.h:1373
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
json_base::json_string_raw< T, Options, Constructor > json_string_raw_no_name
Definition: daw_json_link_types.h:623
json_base::json_custom< T, FromJsonConverter, ToJsonConverter, json_details::json_custom_opts_set< Options, JsonCustomTypes::Literal > > json_custom_lit_no_name
Definition: daw_json_link_types.h:1160
Definition: daw_from_json.h:22
Definition: daw_json_value.h:41
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
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1244
Definition: daw_json_link_types.h:1182
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:1209
json_details::unwrap_type< Container, Nullable > base_type
Definition: daw_json_link_types.h:1198
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:1219
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1207
void i_am_a_json_type
Definition: daw_json_link_types.h:1183
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:1217
Constructor constructor_t
Definition: daw_json_link_types.h:1196
typename json_element_t::parse_to_t json_element_parse_to_t
Definition: daw_json_link_types.h:1190
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:1212
json_details::json_deduced_type< JsonElement > json_element_t
Definition: daw_json_link_types.h:1189
typename json_details::construction_result< Nullable !=JsonNullable::MustExist, Constructor, json_element_parse_to_t const *, json_element_parse_to_t const * >::type parse_to_t
Definition: daw_json_link_types.h:1205
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:1184
Definition: daw_json_link_types.h:475
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:491
static constexpr daw::string_view name
Definition: daw_json_link_types.h:477
json_details::unwrap_type< T, nullable > base_type
Definition: daw_json_link_types.h:482
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:480
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:499
Constructor constructor_t
Definition: daw_json_link_types.h:489
static constexpr LiteralAsStringOpt literal_as_string
Definition: daw_json_link_types.h:496
void i_am_a_json_type
Definition: daw_json_link_types.h:476
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:478
typename json_details::construction_result< nullable !=JsonNullable::MustExist, Constructor, base_type >::type parse_to_t
Definition: daw_json_link_types.h:487
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:493
T wrapped_type
Definition: daw_json_link_types.h:481
Definition: daw_json_link_types.h:775
json_details::unwrap_type< T, nullable > base_type
Definition: daw_json_link_types.h:782
json_details::json_class_constructor_t< base_type, Constructor > constructor_t
Definition: daw_json_link_types.h:784
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:797
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:801
T wrapped_type
Definition: daw_json_link_types.h:778
typename std::conditional_t< force_aggregate_construction< base_type >::value, daw::traits::identity< base_type >, daw::traits::identity< typename data_contract::template result_type< constructor_t > >>::type parse_to_t
Definition: daw_json_link_types.h:795
json_data_contract_trait_t< base_type > data_contract
Definition: daw_json_link_types.h:789
static constexpr daw::string_view name
Definition: daw_json_link_types.h:777
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:779
void i_am_a_json_type
Definition: daw_json_link_types.h:776
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:799
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:780
Definition: daw_json_link_types.h:1075
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:1082
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1098
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:1099
FromJsonConverter from_converter_t
Definition: daw_json_link_types.h:1078
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:1080
static constexpr JsonCustomTypes custom_json_type
Definition: daw_json_link_types.h:1104
typename json_details::construction_result< nullable !=JsonNullable::MustExist, FromJsonConverter, std::string_view >::type parse_to_t
Definition: daw_json_link_types.h:1091
ToJsonConverter to_converter_t
Definition: daw_json_link_types.h:1077
FromJsonConverter constructor_t
Definition: daw_json_link_types.h:1079
void i_am_a_json_type
Definition: daw_json_link_types.h:1076
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:1108
json_details::unwrap_type< T, nullable > base_type
Definition: daw_json_link_types.h:1085
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:1101
Definition: daw_json_link_types.h:712
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:716
json_details::unwrap_type< T, Nullable > base_type
Definition: daw_json_link_types.h:717
typename json_details::construction_result< Nullable !=JsonNullable::MustExist, Constructor, char const *, std::size_t >::type parse_to_t
Definition: daw_json_link_types.h:723
static constexpr daw::string_view name
Definition: daw_json_link_types.h:725
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:732
void i_am_a_json_type
Definition: daw_json_link_types.h:713
Constructor constructor_t
Definition: daw_json_link_types.h:714
T wrapped_type
Definition: daw_json_link_types.h:715
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:728
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:730
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:726
Definition: daw_json_link_types.h:1490
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:1537
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:1533
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:1535
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:1492
json_details::copy_name_when_noname< json_details::json_deduced_type< JsonKeyType >, json_details::default_key_name > json_key_t
Definition: daw_json_link_types.h:1504
json_details::copy_name_when_noname< json_details::json_deduced_type< JsonValueType >, json_details::default_value_name > json_value_t
Definition: daw_json_link_types.h:1513
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:1531
json_details::json_class_constructor_t< base_type, Constructor > constructor_t
Definition: daw_json_link_types.h:1495
typename json_details::construction_result< Nullable !=JsonNullable::MustExist, Constructor, base_type >::type parse_to_t
Definition: daw_json_link_types.h:1500
void i_am_a_json_type
Definition: daw_json_link_types.h:1491
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1530
json_details::unwrap_type< Container, Nullable > base_type
Definition: daw_json_link_types.h:1493
Definition: daw_json_link_types.h:1378
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:1419
json_details::json_class_constructor_t< base_type, Constructor > constructor_t
Definition: daw_json_link_types.h:1383
void i_am_a_json_type
Definition: daw_json_link_types.h:1379
json_details::json_deduced_type< JsonValueType > json_element_t
Definition: daw_json_link_types.h:1393
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:1380
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1418
json_details::json_deduced_type< JsonKeyType > json_key_t
Definition: daw_json_link_types.h:1404
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:1421
json_details::unwrap_type< Container, Nullable > base_type
Definition: daw_json_link_types.h:1381
typename json_details::construction_result< Nullable !=JsonNullable::MustExist, Constructor, std::pair< typename json_key_t::parse_to_t const, typename json_element_t::parse_to_t > const *, std::pair< typename json_key_t::parse_to_t const, typename json_element_t::parse_to_t > const * >::type parse_to_t
Definition: daw_json_link_types.h:1416
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:1425
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:1423
Definition: daw_json_link_types.h:353
T wrapped_type
Definition: daw_json_link_types.h:355
Constructor constructor_t
Definition: daw_json_link_types.h:376
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:378
typename json_details::construction_result< nullable !=JsonNullable::MustExist, Constructor, base_type >::type parse_to_t
Definition: daw_json_link_types.h:369
static constexpr LiteralAsStringOpt literal_as_string
Definition: daw_json_link_types.h:385
json_details::unwrap_type< T, nullable > base_type
Definition: daw_json_link_types.h:361
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:382
static constexpr JsonRangeCheck range_check
Definition: daw_json_link_types.h:389
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:392
static constexpr daw::string_view name
Definition: daw_json_link_types.h:356
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:359
void i_am_a_json_type
Definition: daw_json_link_types.h:354
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:357
Definition: daw_json_link_types.h:1696
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1710
Constructor constructor_t
Definition: daw_json_link_types.h:1700
json_details::unwrap_type< T, nullable > base_type
Definition: daw_json_link_types.h:1702
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:1701
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:1712
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:1714
typename json_details::construction_result< nullable !=JsonNullable::MustExist, Constructor, char const *, char const * >::type parse_to_t
Definition: daw_json_link_types.h:1708
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:1717
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:1698
void i_am_a_json_type
Definition: daw_json_link_types.h:1697
Definition: daw_json_link_types.h:1279
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1313
json_details::unwrap_type< Container, nullable > base_type
Definition: daw_json_link_types.h:1304
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:1281
typename json_details::construction_result< nullable !=JsonNullable::MustExist, Constructor, json_element_parse_to_t const *, json_element_parse_to_t const *, std::size_t >::type parse_to_t
Definition: daw_json_link_types.h:1311
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:1282
typename json_element_t::parse_to_t json_element_parse_to_t
Definition: daw_json_link_types.h:1297
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:1323
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:1315
SizeMember dependent_member
Definition: daw_json_link_types.h:1295
void i_am_a_json_type
Definition: daw_json_link_types.h:1280
json_details::json_deduced_type< JsonElement > json_element_t
Definition: daw_json_link_types.h:1287
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:1318
Constructor constructor_t
Definition: daw_json_link_types.h:1303
Definition: daw_json_link_types.h:546
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:563
static constexpr daw::string_view name
Definition: daw_json_link_types.h:560
static constexpr AllowEscapeCharacter allow_escape_character
Definition: daw_json_link_types.h:574
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:548
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:565
typename json_details::construction_result< nullable !=JsonNullable::MustExist, Constructor, base_type >::type parse_to_t
Definition: daw_json_link_types.h:558
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:550
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:561
static constexpr EightBitModes eight_bit_mode
Definition: daw_json_link_types.h:571
Constructor constructor_t
Definition: daw_json_link_types.h:551
String wrapped_type
Definition: daw_json_link_types.h:552
void i_am_a_json_type
Definition: daw_json_link_types.h:547
json_details::unwrap_type< String, nullable > base_type
Definition: daw_json_link_types.h:553
static constexpr EmptyStringNull empty_is_null
Definition: daw_json_link_types.h:568
Definition: daw_json_link_types.h:635
static constexpr daw::string_view name
Definition: daw_json_link_types.h:650
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:653
String wrapped_type
Definition: daw_json_link_types.h:641
static constexpr EightBitModes eight_bit_mode
Definition: daw_json_link_types.h:657
void i_am_a_json_type
Definition: daw_json_link_types.h:636
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:660
json_details::unwrap_type< String, nullable > base_type
Definition: daw_json_link_types.h:642
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:651
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:637
static constexpr EmptyStringNull empty_is_null
Definition: daw_json_link_types.h:655
typename json_details::construction_result< nullable !=JsonNullable::MustExist, Constructor, char const *, char const * >::type parse_to_t
Definition: daw_json_link_types.h:648
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:639
Constructor constructor_t
Definition: daw_json_link_types.h:640
Definition: daw_json_link_types.h:972
T wrapped_type
Definition: daw_json_link_types.h:982
Switcher switcher
Definition: daw_json_link_types.h:992
void i_am_a_tagged_variant
Definition: daw_json_link_types.h:974
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:975
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:976
void i_am_a_json_type
Definition: daw_json_link_types.h:973
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:1004
json_details::unwrap_type< T, Nullable > base_type
Definition: daw_json_link_types.h:993
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:1002
static constexpr daw::string_view name
Definition: daw_json_link_types.h:999
T parse_to_t
Definition: daw_json_link_types.h:998
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:1000
JsonElements json_elements
Definition: daw_json_link_types.h:1006
json_details::json_class_constructor_t< T, Constructor > constructor_t
Definition: daw_json_link_types.h:995
TagMember dependent_member
Definition: daw_json_link_types.h:990
Definition: daw_json_link_types.h:1605
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:1613
typename json_details::construction_result< nullable !=JsonNullable::MustExist, Constructor, base_type >::type parse_to_t
Definition: daw_json_link_types.h:1625
json_details::json_class_constructor_t< base_type, Constructor > constructor_t
Definition: daw_json_link_types.h:1619
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:1629
Tuple wrapped_type
Definition: daw_json_link_types.h:1609
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1607
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:1627
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:1631
void i_am_a_json_type
Definition: daw_json_link_types.h:1606
json_details::unwrap_type< Tuple, nullable > base_type
Definition: daw_json_link_types.h:1616
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:1610
Definition: daw_json_link_types.h:896
static constexpr JsonNullable nullable
Definition: daw_json_link_types.h:920
json_details::unwrap_type< T, Nullable > base_type
Definition: daw_json_link_types.h:904
static constexpr JsonParseTypes expected_type
Definition: daw_json_link_types.h:911
static constexpr JsonBaseParseTypes underlying_json_type
Definition: daw_json_link_types.h:916
void i_am_a_json_type
Definition: daw_json_link_types.h:897
json_details::json_class_constructor_t< T, Constructor > constructor_t
Definition: daw_json_link_types.h:906
JsonElements json_elements
Definition: daw_json_link_types.h:918
T parse_to_t
Definition: daw_json_link_types.h:909
static constexpr daw::string_view name
Definition: daw_json_link_types.h:910
static constexpr JsonParseTypes base_expected_type
Definition: daw_json_link_types.h:913
T wrapped_type
Definition: daw_json_link_types.h:903
static constexpr bool must_be_class_member
Definition: daw_json_link_types.h:898
Definition: daw_json_link_types.h:518
static constexpr daw::string_view name
Definition: daw_json_link_types.h:520
Definition: daw_json_link_types.h:100
void i_am_a_json_member_list
Definition: daw_json_link_types.h:101
static constexpr DAW_ATTRIB_FLATTEN json_details::json_result< JsonClass > parse_to_class(ParseState &parse_state, template_param< JsonClass >)
Definition: daw_json_link_types.h:128
json_details::json_class_parse_result_t< Constructor, json_member > result_type
Definition: daw_json_link_types.h:122
json_details::json_deduced_type< JsonMember > json_member
Definition: daw_json_link_types.h:103
void i_am_a_json_map_alias
Definition: daw_json_link_types.h:102
static constexpr OutputIterator serialize(OutputIterator it, Member const &m, Value const &)
Definition: daw_json_link_types.h:115
Definition: daw_json_link_types.h:822
static constexpr daw::string_view name
Definition: daw_json_link_types.h:824
Definition: daw_json_link_types.h:1130
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1132
static auto const & to_json_data(tuple_json_mapping< Members... > const &value)
Definition: daw_json_link_types.h:163
Definition: daw_json_traits.h:125
Definition: daw_json_link_types.h:750
static constexpr daw::string_view name
Definition: daw_json_link_types.h:751
Definition: daw_json_link_types.h:1566
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1568
Definition: daw_json_link_types.h:1453
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1455
Definition: daw_json_link_types.h:33
void i_am_a_json_member_list
Definition: daw_json_link_types.h:34
json_details::json_class_parse_result_t< Constructor, JsonMembers... > result_type
Definition: daw_json_link_types.h:74
static constexpr OutputIterator serialize(OutputIterator it, Tuple< Ts... > const &args, Value const &v)
Definition: daw_json_link_types.h:57
static constexpr DAW_ATTRIB_FLATTEN json_details::json_result< JsonClass > parse_to_class(ParseState &parse_state, template_param< JsonClass >)
Definition: daw_json_link_types.h:88
Definition: daw_json_link_types.h:414
static constexpr daw::string_view name
Definition: daw_json_link_types.h:416
Definition: daw_json_link_types.h:206
void i_am_a_json_member_list
Definition: daw_json_link_types.h:207
static constexpr OutputIterator serialize(OutputIterator it, Tuple< Ts... > const &args, Value const &v)
Definition: daw_json_link_types.h:221
void i_am_a_ordered_member_list
Definition: daw_json_link_types.h:208
json_details::json_class_parse_result_t< Constructor, json_details::ordered_member_subtype_t< json_details::json_deduced_type< JsonMembers > >... > result_type
Definition: daw_json_link_types.h:242
static constexpr json_details::json_result< JsonClass > parse_to_class(ParseState &parse_state, template_param< JsonClass >)
Definition: daw_json_link_types.h:255
Definition: daw_json_link_types.h:1742
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1743
Definition: daw_json_link_types.h:1338
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1340
Definition: daw_json_link_types.h:603
static constexpr daw::string_view name
Definition: daw_json_link_types.h:606
Definition: daw_json_link_types.h:685
static constexpr daw::string_view name
Definition: daw_json_link_types.h:686
Definition: daw_json_link_types.h:280
void i_am_a_submember_tagged_variant
Definition: daw_json_link_types.h:282
json_details::json_class_parse_result_t< Constructor, json_details::json_deduced_type< daw::traits::first_type< JsonClasses... > >> result_type
Definition: daw_json_link_types.h:311
static constexpr json_details::from_json_result_t< JsonClass > parse_to_class(ParseState &parse_state, template_param< JsonClass >)
Definition: daw_json_link_types.h:324
void i_am_a_json_member_list
Definition: daw_json_link_types.h:281
static constexpr OutputIterator serialize(OutputIterator it, Value const &v)
Definition: daw_json_link_types.h:292
Definition: daw_json_link_types.h:1035
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1037
Definition: daw_json_link_types.h:1643
static constexpr daw::string_view name
Definition: daw_json_link_types.h:1644
Definition: daw_json_link_types_fwd.h:316
Definition: daw_json_link_types.h:941
static constexpr daw::string_view name
Definition: daw_json_link_types.h:942
Definition: daw_json_link_types.h:856
Definition: daw_json_traits.h:331
Definition: daw_json_link_types.h:175
void i_am_a_json_type
Definition: daw_json_link_types.h:177
static constexpr std::size_t member_index
Definition: daw_json_link_types.h:178
void i_am_an_ordered_member
Definition: daw_json_link_types.h:176
json_details::json_deduced_type< JsonMember > json_member
Definition: daw_json_link_types.h:183
typename json_member::parse_to_t parse_to_t
Definition: daw_json_link_types.h:184
Definition: daw_json_link_types.h:150
std::tuple< typename Members::parse_to_t... > members
Definition: daw_json_link_types.h:151
constexpr tuple_json_mapping(Ts &&...values)
Definition: daw_json_link_types.h:154
#define DAW_JSON_VER
Definition: version.h:11