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#pragma once
10
11#include "daw_json_link.h"
12#include "impl/version.h"
13
14#include <daw/daw_traits.h>
15
16#include <ciso646>
17#include <iostream>
18#include <type_traits>
19
20namespace daw::json {
21 inline namespace DAW_JSON_VER {
22 namespace json_details {
23 template<typename T>
26
27 template<typename Container>
30
31 template<typename T>
32 inline constexpr bool is_opted_into_json_iostreams_v =
33 daw::is_detected<is_opted_into_json_iostreams, T>::value;
34
35 template<typename T>
37 daw::is_detected<is_container_opted_into_json_iostreams, T>::value;
38 } // namespace json_details
39 } // namespace DAW_JSON_VER
40} // namespace daw::json
41
42template<typename T>
43auto operator<<( std::ostream &os, T const &value ) -> std::enable_if_t<
44 daw::json::json_details::is_opted_into_json_iostreams_v<T>, std::ostream &> {
45
46 auto out_it = std::ostreambuf_iterator<char>( os );
47 daw::json::to_json( value, out_it );
48 return os;
49}
50
51template<typename Container>
52auto operator<<( std::ostream &os, Container const &c ) -> std::enable_if_t<
53 daw::json::json_details::is_container_opted_into_json_iostreams_v<Container>,
54 std::ostream &> {
55
56 auto out_it = std::ostreambuf_iterator<char>( os );
57 (void)daw::json::to_json_array( c, out_it );
58 return os;
59}
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:43
constexpr bool is_opted_into_json_iostreams_v
Definition: daw_json_iostream.h:32
constexpr bool is_container_opted_into_json_iostreams_v
Definition: daw_json_iostream.h:36
typename json_data_contract< T >::opt_into_iostreams is_opted_into_json_iostreams
Definition: daw_json_iostream.h:25
is_opted_into_json_iostreams< typename Container::value_type > is_container_opted_into_json_iostreams
Definition: daw_json_iostream.h:29
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_traits.h:127
#define DAW_JSON_VER
The version string used in namespace definitions. Must be a valid namespace name.
Definition: version.h:16