13 #include <daw/daw_traits.h>
17 #include <type_traits>
19 namespace daw::json::json_details {
21 using is_opted_into_json_iostreams =
22 typename json_data_contract<T>::opt_into_iostreams;
24 template<
typename Container>
25 using is_container_opted_into_json_iostreams =
26 is_opted_into_json_iostreams<typename Container::value_type>;
29 inline constexpr
bool is_opted_into_json_iostreams_v =
30 daw::is_detected_v<is_opted_into_json_iostreams, T>;
33 inline constexpr
bool is_container_opted_into_json_iostreams_v =
34 daw::is_detected_v<is_container_opted_into_json_iostreams, T>;
39 std::enable_if_t<daw::json::json_details::is_opted_into_json_iostreams_v<T>,
40 std::nullptr_t> =
nullptr>
41 std::ostream &
operator<<( std::ostream &os, T
const &value ) {
42 auto out_it = std::ostreambuf_iterator<char>( os );
47 template<
typename Container,
48 std::enable_if_t<daw::json::json_details::
49 is_container_opted_into_json_iostreams_v<Container>,
50 std::nullptr_t> =
nullptr>
51 std::ostream &
operator<<( std::ostream &os, Container
const &c ) {
52 auto out_it = std::ostreambuf_iterator<char>( os );
54 auto first = std::begin( c );
55 auto last = std::end( c );
59 while( first != last ) {