DAW JSON Link
daw_json_iostream.h
Go to the documentation of this file.
1 // Copyright (c) Darrell Wright
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt)
5 //
6 // Official repository: https://github.com/beached/daw_json_link
7 //
8 
9 
10 #pragma once
11 
12 #include "daw_json_link.h"
13 #include "impl/version.h"
14 
15 #include <daw/daw_traits.h>
16 
17 #include <ciso646>
18 #include <iostream>
19 #include <type_traits>
20 
21 namespace daw::json {
22  inline namespace DAW_JSON_VER {
23  namespace json_details {
24  template<typename T>
27 
28  template<typename Container>
31 
32  template<typename T>
33  inline constexpr bool is_opted_into_json_iostreams_v =
34  daw::is_detected<is_opted_into_json_iostreams, T>::value;
35 
36  template<typename T>
38  daw::is_detected<is_container_opted_into_json_iostreams, T>::value;
39  } // namespace json_details
40  } // namespace DAW_JSON_VER
41 } // namespace daw::json
42 
43 template<typename T>
44 auto operator<<( std::ostream &os, T const &value ) -> std::enable_if_t<
45  daw::json::json_details::is_opted_into_json_iostreams_v<T>, std::ostream &> {
46 
47  auto out_it = std::ostreambuf_iterator<char>( os );
48  daw::json::to_json( value, out_it );
49  return os;
50 }
51 
52 template<typename Container>
53 auto operator<<( std::ostream &os, Container const &c ) -> std::enable_if_t<
54  daw::json::json_details::is_container_opted_into_json_iostreams_v<Container>,
55  std::ostream &> {
56 
57  auto out_it = std::ostreambuf_iterator<char>( os );
58  (void)daw::json::to_json_array( c, out_it );
59  return os;
60 }
auto operator<<(std::ostream &os, T const &value) -> std::enable_if_t< daw::json::json_details::is_opted_into_json_iostreams_v< T >, std::ostream & >
Definition: daw_json_iostream.h:44
constexpr bool is_opted_into_json_iostreams_v
Definition: daw_json_iostream.h:33
constexpr bool is_container_opted_into_json_iostreams_v
Definition: daw_json_iostream.h:37
typename json_data_contract< T >::opt_into_iostreams is_opted_into_json_iostreams
Definition: daw_json_iostream.h:26
is_opted_into_json_iostreams< typename Container::value_type > is_container_opted_into_json_iostreams
Definition: daw_json_iostream.h:30
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 out_it)
Definition: daw_to_json.h:52
Definition: daw_from_json.h:22
Definition: daw_json_traits.h:125
#define DAW_JSON_VER
Definition: version.h:11