16#include <daw/daw_traits.h>
25 template<
typename Value,
typename JsonClass,
typename OutputIterator>
26 [[maybe_unused]]
constexpr OutputIterator
to_json( Value
const &value,
27 OutputIterator out_it ) {
28 if constexpr( std::is_pointer<OutputIterator>::value ) {
36 template_arg<JsonClass>,
43 template<
typename Result,
typename Value,
typename JsonClass,
44 typename SerializationPolicy>
45 [[maybe_unused, nodiscard]]
constexpr Result
to_json( Value
const &value ) {
47 if constexpr( std::is_same_v<Result, std::string> ) {
48 result.reserve( 4096 );
51 using iter_t = std::back_insert_iterator<Result>;
52 using policy = std::conditional_t<
53 std::is_same_v<SerializationPolicy, use_default_serialization_policy>,
57 policy( iter_t( result ) ), value );
58 if constexpr( std::is_same_v<Result, std::string> ) {
59 result.shrink_to_fit( );
64 template<
typename JsonElement,
typename Container,
typename OutputIterator>
65 [[maybe_unused]]
constexpr OutputIterator
68 traits::is_container_like_v<daw::remove_cvref_t<Container>>,
69 "Supplied container must support begin( )/end( )" );
71 std::conditional_t<is_serialization_policy<OutputIterator>::value,
75 auto out_it = iter_t(
it );
76 if constexpr( std::is_pointer<OutputIterator>::value ) {
83 auto first = std::begin( c );
84 auto last = std::end( c );
85 bool const has_elements = first != last;
86 while( first != last ) {
87 auto const &v = *first;
88 using v_type = DAW_TYPEOF( v );
89 constexpr bool is_auto_detect_v =
90 std::is_same<JsonElement,
91 json_details::auto_detect_array_element>::value;
93 std::conditional_t<is_auto_detect_v,
94 json_details::json_deduced_type<v_type>,
98 not std::is_same_v<JsonMember,
100 "Unable to detect unnamed mapping" );
102 out_it.next_member( );
107 if( first != last ) {
112 out_it.del_indent( );
114 out_it.output_newline( );
117 return out_it.get( );
120 template<
typename Result,
typename JsonElement,
121 typename SerializationPolicy,
typename Container>
122 [[maybe_unused, nodiscard]]
constexpr Result
125 traits::is_container_like_v<daw::remove_cvref_t<Container>>,
126 "Supplied container must support begin( )/end( )" );
127 using iter_t = json_details::basic_appender<Result>;
128 using policy = std::conditional_t<
129 std::is_same_v<SerializationPolicy, use_default_serialization_policy>,
132 auto out_it = policy( iter_t( result ) );
134 to_json_array<JsonElement>( c, out_it );
#define daw_json_assert(Bool,...)
Definition: daw_json_assert.h:179
Iterator & it
Definition: daw_json_traits.h:251
constexpr OutputIterator member_to_string(template_param< JsonMember >, OutputIterator it, T const &value)
Definition: to_daw_json_string.h:1340
constexpr OutputIterator to_json(Value const &value, OutputIterator out_it)
Definition: daw_to_json.h:26
constexpr OutputIterator to_json_array(Container const &c, OutputIterator it)
Definition: daw_to_json.h:66
Definition: daw_from_json.h:22
Definition: daw_json_serialize_policy.h:118
Definition: daw_json_traits.h:119
Definition: daw_json_serialize_policy.h:47
#define DAW_JSON_VER
The version string used in namespace definitions. Must be a valid namespace name.
Definition: version.h:16