13#include <daw/daw_consteval.h>
14#include <daw/daw_cpp_feature_check.h>
15#include <daw/daw_likely.h>
16#include <daw/daw_string_view.h>
28#if defined( __cpp_nontype_template_parameter_class ) and \
29 not defined( DAW_USE_CPP17_ABI )
36 template<std::
size_t N>
38 static_assert( N > 0 );
39 char const m_data[N]{ };
42 template<std::size_t... Is>
43 DAW_CONSTEVAL json_name(
char const ( &ptr )[N],
44 std::index_sequence<Is...> )
45 : m_data{ ptr[Is]... } {}
48 DAW_CONSTEVAL json_name(
char const ( &ptr )[N] )
49 : json_name( ptr, std::make_index_sequence<N>{ } ) {}
51 constexpr operator daw::string_view( )
const {
52 return { m_data, N - 1 };
56 [[nodiscard]]
constexpr char const *begin( )
const {
61 [[nodiscard]]
constexpr char const *end( )
const {
62 return m_data +
static_cast<ptrdiff_t
>( size( ) );
65 [[nodiscard]]
static constexpr std::size_t size( ) {
69 template<std::
size_t M>
70 constexpr bool operator==( json_name<M>
const &rhs )
const {
74 for( std::size_t n = 0;
n < N; ++
n ) {
75 if( m_data[n] != rhs.m_data[n] ) {
82 constexpr bool operator==( daw::string_view rhs )
const {
83 return daw::string_view( m_data, N - 1 ) == rhs;
86 constexpr bool operator==( std::string_view rhs )
const {
87 return std::string_view( m_data, N - 1 ) == rhs;
90 constexpr operator std::string_view( )
const {
91 return std::string_view( m_data, N - 1 );
94 template<
typename... Chars>
95 json_name( Chars... ) -> json_name<
sizeof...( Chars )>;
97 template<std::
size_t N>
98 json_name(
char const ( & )[N] ) -> json_name<N>;
100#define JSONNAMETYPE ::daw::json::json_name
105 namespace json_details {
111#define JSONNAMETYPE char const *
115 namespace json_details {
122 namespace json_details {
123 template<
typename JsonMember>
126 template<
typename JsonMember>
#define JSONNAMETYPE
Definition: daw_json_name.h:111
constexpr char const default_value_name[]
Definition: daw_json_name.h:118
std::bool_constant<(JsonMember::name==no_name_sv)> is_no_name
Definition: daw_json_name.h:124
constexpr char const default_key_name[]
Definition: daw_json_name.h:117
constexpr bool is_no_name_v
Definition: daw_json_name.h:127
constexpr daw::string_view no_name_sv
Definition: daw_json_name.h:114
constexpr char const no_name[]
Definition: daw_json_name.h:113
Definition: daw_from_json.h:22
#define DAW_JSON_VER
The version string used in namespace definitions. Must be a valid namespace name.
Definition: version.h:16