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 
14 #include <ciso646>
15 
16 namespace daw::json::json_details {
17  template<typename JsonMember, bool KnownBounds = false, typename Range>
18  [[nodiscard]] static constexpr json_result<JsonMember>
19  parse_value( ParseTag<JsonParseTypes::Real>, Range &rng );
20 
21  template<typename JsonMember, bool KnownBounds = false, typename Range>
22  [[nodiscard]] static constexpr json_result<JsonMember>
23  parse_value( ParseTag<JsonParseTypes::Signed>, Range &rng );
24 
25  template<typename JsonMember, bool KnownBounds = false, typename Range>
26  [[nodiscard]] static constexpr json_result<JsonMember>
27  parse_value( ParseTag<JsonParseTypes::Unsigned>, Range &rng );
28 
29  template<typename JsonMember, bool KnownBounds = false, typename Range>
30  [[nodiscard]] static constexpr json_result<JsonMember>
31  parse_value( ParseTag<JsonParseTypes::Null>, Range &rng );
32 
33  template<typename JsonMember, bool KnownBounds = false, typename Range>
34  [[nodiscard]] static constexpr json_result<JsonMember>
35  parse_value( ParseTag<JsonParseTypes::Bool>, Range &rng );
36 
37  template<typename JsonMember, bool KnownBounds = false, typename Range>
38  [[nodiscard]] static constexpr json_result<JsonMember>
39  parse_value( ParseTag<JsonParseTypes::StringRaw>, Range &rng );
40 
41  template<typename JsonMember, bool KnownBounds = false, typename Range>
42  [[nodiscard]] static constexpr json_result<JsonMember>
43  parse_value( ParseTag<JsonParseTypes::StringEscaped>, Range &rng );
44 
45  template<typename JsonMember, bool KnownBounds = false, typename Range>
46  [[nodiscard]] static constexpr json_result<JsonMember>
47  parse_value( ParseTag<JsonParseTypes::Date>, Range &rng );
48 
49  template<typename JsonMember, bool KnownBounds = false, typename Range>
50  [[nodiscard]] static constexpr json_result<JsonMember>
51  parse_value( ParseTag<JsonParseTypes::Custom>, Range &rng );
52 
53  template<typename JsonMember, bool KnownBounds = false, typename Range>
54  [[nodiscard]] static constexpr json_result<JsonMember>
55  parse_value( ParseTag<JsonParseTypes::Class>, Range &rng );
56 
57  template<typename JsonMember, bool KnownBounds = false, typename Range>
58  [[nodiscard]] static constexpr json_result<JsonMember>
59  parse_value( ParseTag<JsonParseTypes::Array>, Range & );
60 
61  template<typename JsonMember, bool KnownBounds = false, typename Range>
62  [[nodiscard]] static constexpr json_result<JsonMember>
63  parse_value( ParseTag<JsonParseTypes::KeyValue>, Range &rng );
64 
65  template<typename JsonMember, bool KnownBounds = false, typename Range>
66  [[nodiscard]] static constexpr json_result<JsonMember>
67  parse_value( ParseTag<JsonParseTypes::KeyValueArray>, Range &rng );
68 
69  template<typename JsonMember, bool KnownBounds = false, typename Range>
70  [[nodiscard]] static constexpr json_result<JsonMember>
71  parse_value( ParseTag<JsonParseTypes::Variant>, Range &rng );
72 
73  template<typename JsonMember, bool KnownBounds = false, typename Range>
74  [[nodiscard, maybe_unused]] constexpr json_result<JsonMember>
75  parse_value( ParseTag<JsonParseTypes::VariantTagged>, Range &rng );
76 
77  template<typename JsonMember, bool KnownBounds = false, typename Range>
78  constexpr json_result<JsonMember>
79  parse_value( ParseTag<JsonParseTypes::Unknown>, Range &rng );
80 
81 #if( defined( _MSC_VER ) and not defined( __clang__ ) )
82  // Lying to MSVC about being a random iterator causes issues I have not found
83  // yet
84  template<bool>
85  inline constexpr bool can_random_v = false;
86 #else
87  template<bool KnownBounds>
88  inline constexpr bool can_random_v = KnownBounds;
89 #endif
90 } // namespace daw::json::json_details
daw_json_value.h
daw_json_parse_common.h