DAW JSON Link
daw_json_parse_value_fwd.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_parse_common.h"
12 #include "daw_json_value.h"
13 #include "version.h"
14 
15 #include <ciso646>
16 
17 namespace daw::json {
18  inline namespace DAW_JSON_VER {
19  namespace json_details {
20  template<typename JsonMember, bool KnownBounds = false,
21  typename ParseState>
22  [[nodiscard]] constexpr json_result<JsonMember>
23  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Real> );
24 
25  template<typename JsonMember, bool KnownBounds = false,
26  typename ParseState>
27  [[nodiscard]] constexpr json_result<JsonMember>
28  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Signed> );
29 
30  template<typename JsonMember, bool KnownBounds = false,
31  typename ParseState>
32  [[nodiscard]] constexpr json_result<JsonMember>
33  parse_value( ParseState &parse_state,
34  ParseTag<JsonParseTypes::Unsigned> );
35 
36  template<typename JsonMember, bool KnownBounds = false,
37  typename ParseState>
38  [[nodiscard]] constexpr json_result<JsonMember>
39  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Null> );
40 
41  template<typename JsonMember, bool KnownBounds = false,
42  typename ParseState>
43  [[nodiscard]] constexpr json_result<JsonMember>
44  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Bool> );
45 
46  template<typename JsonMember, bool KnownBounds = false,
47  typename ParseState>
48  [[nodiscard]] constexpr json_result<JsonMember>
49  parse_value( ParseState &parse_state,
50  ParseTag<JsonParseTypes::StringRaw> );
51 
52  template<typename JsonMember, bool KnownBounds = false,
53  typename ParseState>
54  [[nodiscard]] constexpr json_result<JsonMember>
55  parse_value( ParseState &parse_state,
56  ParseTag<JsonParseTypes::StringEscaped> );
57 
58  template<typename JsonMember, bool KnownBounds = false,
59  typename ParseState>
60  [[nodiscard]] constexpr json_result<JsonMember>
61  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Date> );
62 
63  template<typename JsonMember, bool KnownBounds = false,
64  typename ParseState>
65  [[nodiscard]] constexpr json_result<JsonMember>
66  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Custom> );
67 
68  template<typename JsonMember, bool KnownBounds = false,
69  typename ParseState>
70  [[nodiscard]] constexpr json_result<JsonMember>
71  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Class> );
72 
73  template<typename JsonMember, bool KnownBounds = false,
74  typename ParseState>
75  [[nodiscard]] constexpr json_result<JsonMember>
76  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Array> );
77 
78  template<typename JsonMember, bool KnownBounds = false,
79  typename ParseState>
80  [[nodiscard]] constexpr json_result<JsonMember>
81  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Tuple> );
82 
83  template<typename JsonMember, bool KnownBounds = false,
84  typename ParseState>
85  [[nodiscard]] constexpr json_result<JsonMember>
86  parse_value( ParseState &parse_state,
87  ParseTag<JsonParseTypes::SizedArray> );
88 
89  template<typename JsonMember, bool KnownBounds = false,
90  typename ParseState>
91  [[nodiscard]] constexpr json_result<JsonMember>
92  parse_value( ParseState &parse_state,
93  ParseTag<JsonParseTypes::KeyValue> );
94 
95  template<typename JsonMember, bool KnownBounds = false,
96  typename ParseState>
97  [[nodiscard]] constexpr json_result<JsonMember>
98  parse_value( ParseState &parse_state,
99  ParseTag<JsonParseTypes::KeyValueArray> );
100 
101  template<typename JsonMember, bool KnownBounds = false,
102  typename ParseState>
103  [[nodiscard]] constexpr json_result<JsonMember>
104  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Variant> );
105 
106  template<typename JsonMember, bool KnownBounds = false,
107  typename ParseState>
108  [[nodiscard, maybe_unused]] constexpr json_result<JsonMember>
109  parse_value( ParseState &parse_state,
110  ParseTag<JsonParseTypes::VariantTagged> );
111 
112  template<typename JsonMember, bool KnownBounds = false, std::size_t N,
113  typename ParseState, bool B>
114  [[nodiscard]] constexpr json_result<JsonMember>
115  parse_value( ParseState &parse_state,
116  ParseTag<JsonParseTypes::VariantTagged> );
117 
118  template<typename JsonMember, bool KnownBounds = false,
119  typename ParseState>
120  [[nodiscard, maybe_unused]] constexpr json_result<JsonMember>
121  parse_value( ParseState &parse_state, ParseTag<JsonParseTypes::Unknown> );
122 
123 #if defined( _MSC_VER ) and not defined( __clang__ )
124  // Lying to MSVC about being a random iterator causes issues I have not
125  // found yet
126  template<bool>
127  inline constexpr bool can_random_v = false;
128 #else
129  template<bool IsKnown>
130  inline constexpr bool can_random_v = IsKnown;
131 #endif
132  } // namespace json_details
133  } // namespace DAW_JSON_VER
134 } // namespace daw::json
ParseState & parse_state
Definition: daw_json_parse_class.h:201
constexpr bool can_random_v
Definition: daw_json_parse_value_fwd.h:130
constexpr DAW_ATTRIB_INLINE json_result< JsonMember > parse_value(ParseState &parse_state, ParseTag< JsonParseTypes::Real >)
Definition: daw_json_parse_value.h:67
Definition: daw_from_json.h:22
#define DAW_JSON_VER
Definition: version.h:11