19#include <daw/daw_move.h>
20#include <daw/daw_utility.h>
34 template<
typename ParseState>
41 template<
typename ParseState>
43 std::optional<std::string_view>
name;
47 template<std::
size_t Idx,
typename ParseState>
48 constexpr decltype( auto )
50 static_assert( Idx < 2 );
51 if constexpr( Idx == 0 ) {
58 template<std::
size_t Idx,
typename ParseState>
60 static_assert( Idx < 2 );
61 if constexpr( Idx == 0 ) {
68 template<std::
size_t Idx,
typename ParseState>
69 constexpr decltype( auto )
71 static_assert( Idx < 2 );
72 if constexpr( Idx == 0 ) {
82 template<
typename ParseState>
83 class tuple_element<0,
daw::json::basic_json_pair<ParseState>> {
85 using type = std::optional<std::string_view>;
88 template<
typename ParseState>
89 class tuple_element<1,
daw::json::basic_json_pair<ParseState>> {
94 template<
typename ParseState>
95 class tuple_size<
daw::json::basic_json_pair<ParseState>>
96 :
public std::integral_constant<std::size_t, 2> {};
105 template<
typename ParseState>
118 ParseState m_state{ };
132 [[nodiscard]]
constexpr std::optional<std::string_view>
name( )
const {
138 return std::string_view( std::data( result ), std::size( result ) );
148 return ParseState( m_state );
167 return { std::string_view( std::data(
name ), std::size(
name ) ),
192 m_state.move_next_member_or_end( );
212 return *m_state.class_first ==
'[';
220 return *m_state.class_first ==
'{';
227 [[nodiscard]]
constexpr bool good( )
const {
228 if( not m_state.has_more( ) or m_state.is_null( ) ) {
231 switch( m_state.front( ) ) {
261 [[nodiscard]]
constexpr explicit operator bool( )
const {
274 [[nodiscard]]
constexpr bool
278 return m_state.first == rhs.m_state.first;
282 return not rhs.
good( );
290 [[nodiscard]]
constexpr bool
296 template<
typename ParseState>
299 using CharT =
typename ParseState::CharT;
310 template<
typename ParseState>
319 template<
typename ParseState>
321 ParseState m_parse_state{ };
324 using CharT =
typename ParseState::CharT;
337 m_parse_state.trim_left( );
347 daw::remove_cvref_t<String>>,
349 std::nullptr_t> =
nullptr>
351 : m_parse_state( std::data( sv ),
daw::data_end( sv ) ) {}
357 : m_parse_state( first, first + static_cast<std::ptrdiff_t>( sz ) ) {}
363 : m_parse_state( first, last ) {}
370 return m_parse_state;
380 ParseState( m_parse_state.first, m_parse_state.last );
400 if( not m_parse_state.has_more( ) ) {
403 switch( m_parse_state.front( ) ) {
423 if constexpr( not ParseState::is_unchecked_input ) {
424 if( m_parse_state.starts_with(
"true" ) ) {
432 if constexpr( not ParseState::is_unchecked_input ) {
433 if( m_parse_state.starts_with(
"false" ) ) {
442 ErrorReason::InvalidNull, m_parse_state );
459 return { std::data( result ), std::size( result ) };
476 template<
typename Allocator = std::allocator<
char>,
477 typename Traits = std::
char_traits<
char>>
478 [[nodiscard]] std::basic_string<char, Traits, Allocator>
479 get_string( Allocator
const &alloc = std::allocator<char>( ) )
const {
486 return { std::data( result ), std::size( result ), alloc };
493 [[nodiscard]]
constexpr bool is_null( )
const {
494 return ( m_parse_state.starts_with(
"null" ) );
502 return m_parse_state.is_opening_brace_checked( );
510 return m_parse_state.is_opening_bracket_checked( );
518 if( not m_parse_state.has_more( ) ) {
521 switch( m_parse_state.front( ) ) {
543 [[nodiscard]]
inline constexpr bool is_string( )
const {
544 return m_parse_state.is_quotes_checked( );
551 [[nodiscard]]
constexpr bool is_bool( )
const {
552 if( not m_parse_state.has_more( ) ) {
555 switch( m_parse_state.front( ) ) {
557 if constexpr( not ParseState::is_unchecked_input ) {
558 return m_parse_state ==
"true";
563 if constexpr( not ParseState::is_unchecked_input ) {
564 return m_parse_state ==
"false";
581 template<
typename NewParseState>
582 explicit inline constexpr
585 NewParseState( m_parse_state.first, m_parse_state.last );
586 new_range.class_first = m_parse_state.class_first;
587 new_range.class_last = m_parse_state.class_last;
591 template<
typename ParseState>
594 namespace json_details {
596 inline constexpr bool is_string_view_like_v<basic_json_value<T>> =
false;
Definition: daw_json_value.h:320
constexpr ParseState get_raw_state() const
Definition: daw_json_value.h:369
constexpr basic_json_value(String &&sv)
Definition: daw_json_value.h:350
constexpr std::string_view get_string_view() const
Definition: daw_json_value.h:452
constexpr basic_json_value(ParseState parse_state)
Definition: daw_json_value.h:334
std::ptrdiff_t difference_type
Definition: daw_json_value.h:328
std::basic_string< char, Traits, Allocator > get_string(Allocator const &alloc=std::allocator< char >()) const
Definition: daw_json_value.h:479
JsonBaseParseTypes type() const
Definition: daw_json_value.h:399
constexpr bool is_bool() const
Definition: daw_json_value.h:551
std::size_t size_type
Definition: daw_json_value.h:327
constexpr bool is_null() const
Definition: daw_json_value.h:493
typename ParseState::CharT CharT
Definition: daw_json_value.h:324
constexpr basic_json_value(CharT *first, std::size_t sz)
Definition: daw_json_value.h:356
constexpr iterator begin() const
Definition: daw_json_value.h:378
constexpr iterator end() const
Definition: daw_json_value.h:390
constexpr bool is_string() const
Definition: daw_json_value.h:543
constexpr bool is_unknown() const
Definition: daw_json_value.h:577
constexpr bool is_number() const
Definition: daw_json_value.h:517
constexpr ParseState get_state() const
Definition: daw_json_value.h:462
constexpr basic_json_value(CharT *first, CharT *last)
Definition: daw_json_value.h:362
constexpr bool is_array() const
Definition: daw_json_value.h:509
constexpr bool is_class() const
Definition: daw_json_value.h:501
#define daw_json_assert_weak(Bool,...)
Definition: daw_json_assert.h:190
ParseState & parse_state
Definition: daw_json_parse_class.h:182
constexpr DAW_ATTRIB_FLATTEN daw::string_view parse_name(ParseState &parse_state)
Definition: daw_json_parse_name.h:128
constexpr ParseState skip_value(ParseState &parse_state)
Definition: daw_json_skip.h:304
std::conjunction< daw::is_detected< is_string_like_impl::has_data_test, T >, daw::is_detected< is_string_like_impl::has_size_test, T > > is_string_view_like
Definition: daw_json_traits.h:528
basic_json_value_iterator_range(basic_json_value_iterator< ParseState >, basic_json_value_iterator< ParseState >) -> basic_json_value_iterator_range< ParseState >
constexpr decltype(auto) get(basic_json_pair< ParseState > const &parse_state)
Definition: daw_json_value.h:49
DAW_ATTRIB_NOINLINE void daw_json_error(ErrorReason reason)
Definition: daw_json_assert.h:39
JsonBaseParseTypes
The fundamental JSON types.
Definition: daw_json_enums.h:53
basic_json_value(ParseState) -> basic_json_value< ParseState >
Definition: daw_from_json.h:22
Definition: daw_from_json.h:22
Definition: daw_json_value.h:42
std::optional< std::string_view > name
Definition: daw_json_value.h:43
basic_json_value< ParseState > value
Definition: daw_json_value.h:44
Definition: daw_json_value.h:297
iterator last
Definition: daw_json_value.h:301
iterator first
Definition: daw_json_value.h:300
typename ParseState::CharT CharT
Definition: daw_json_value.h:299
constexpr iterator end()
Definition: daw_json_value.h:306
constexpr iterator begin()
Definition: daw_json_value.h:303
Definition: daw_json_value.h:106
std::string_view key_type
Definition: daw_json_value.h:107
constexpr bool operator!=(basic_json_value_iterator< ParseState > const &rhs) const
Definition: daw_json_value.h:291
std::ptrdiff_t difference_type
Definition: daw_json_value.h:114
constexpr basic_json_value< ParseState > value() const
Definition: daw_json_value.h:146
constexpr basic_json_value_iterator()=default
constexpr basic_json_value_iterator operator++(int)
Definition: daw_json_value.h:201
constexpr bool is_array() const
Definition: daw_json_value.h:211
constexpr basic_json_pair< ParseState > operator*()
Definition: daw_json_value.h:159
constexpr bool good() const
Definition: daw_json_value.h:227
constexpr ParseState const & get_raw_state() const
Definition: daw_json_value.h:265
constexpr basic_json_value_iterator & operator++()
Definition: daw_json_value.h:186
basic_json_pair< ParseState > value_type
Definition: daw_json_value.h:111
std::forward_iterator_tag iterator_category
Definition: daw_json_value.h:115
constexpr bool is_class() const
Definition: daw_json_value.h:219
constexpr std::optional< std::string_view > name() const
Definition: daw_json_value.h:132
constexpr pointer operator->()
Definition: daw_json_value.h:178
constexpr bool operator==(basic_json_value_iterator< ParseState > const &rhs) const
Definition: daw_json_value.h:275
Definition: daw_json_arrow_proxy.h:16
#define DAW_JSON_VER
The version string used in namespace definitions. Must be a valid namespace name.
Definition: version.h:16