26#ifndef ROUTER_SRC_REST_MRS_SRC_HELPER_JSON_RAPID_JSON_TO_STRUCT_H_
27#define ROUTER_SRC_REST_MRS_SRC_HELPER_JSON_RAPID_JSON_TO_STRUCT_H_
34#include <rapidjson/reader.h>
48template <
typename UserResult>
50 :
public rapidjson::BaseReaderHandler<
51 rapidjson::UTF8<>, RapidReaderHandlerToStruct<UserResult>> {
54 rapidjson::kParseNumbersAsStringsFlag};
58 rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
60 using Ch =
typename Parent::Ch;
96 virtual bool Int(
int) {
143 if (!
keys_.empty()) {
144 auto &b =
keys_.back();
177 if (!
keys_.empty()) {
178 auto &b =
keys_.back();
198 if (
key.name.empty())
continue;
241template <
typename UserResult>
249 std::string &&
value) = 0;
Definition: rapid_json_to_struct.h:243
virtual void handle_array_value(const std::string &, std::string &&)
Definition: rapid_json_to_struct.h:251
void handle_value(std::string &&vt)
Definition: rapid_json_to_struct.h:253
bool RawNumber(const Ch *v, rapidjson::SizeType v_len, bool) override
enabled via kParseNumbersAsStringsFlag, string is not null-terminated (use length)
Definition: rapid_json_to_struct.h:267
virtual void handle_object_value(const std::string &key, std::string &&value)=0
bool String(const Ch *v, rapidjson::SizeType v_len, bool) override
Definition: rapid_json_to_struct.h:262
bool Bool(bool v) override
Definition: rapid_json_to_struct.h:272
This class is a adapter for Reader from RapidJson.
Definition: rapid_json_to_struct.h:51
constexpr static rapidjson::ParseFlag k_parse_flags
Definition: rapid_json_to_struct.h:53
bool is_array_value()
Definition: rapid_json_to_struct.h:191
virtual bool Double(double)
Definition: rapid_json_to_struct.h:116
const UserResult & get_result()
Definition: rapid_json_to_struct.h:66
virtual bool Bool(bool)
Definition: rapid_json_to_struct.h:86
KeyValue key_
Definition: rapid_json_to_struct.h:236
KeyValue & get_parent_key()
Definition: rapid_json_to_struct.h:225
int arrays_
Definition: rapid_json_to_struct.h:238
virtual void empty_object()
Definition: rapid_json_to_struct.h:121
rapidjson::BaseReaderHandler< rapidjson::UTF8<>, RapidReaderHandlerToStruct< UserResult > > Parent
Definition: rapid_json_to_struct.h:59
int get_level() const
Definition: rapid_json_to_struct.h:192
RapidReaderHandlerToStruct(const std::string &separator=".")
Definition: rapid_json_to_struct.h:61
bool StartArray()
Definition: rapid_json_to_struct.h:161
std::list< KeyValue > get_keys() const
Definition: rapid_json_to_struct.h:216
typename Parent::Ch Ch
Definition: rapid_json_to_struct.h:60
int level_
Definition: rapid_json_to_struct.h:237
uint64_t values_processed_
Definition: rapid_json_to_struct.h:234
bool Key(const Ch *str, rapidjson::SizeType len, bool)
Definition: rapid_json_to_struct.h:154
virtual bool on_new_value()
Definition: rapid_json_to_struct.h:68
virtual bool Int64(int64_t)
Definition: rapid_json_to_struct.h:106
virtual ~RapidReaderHandlerToStruct()=default
virtual bool Uint64(uint64_t)
Definition: rapid_json_to_struct.h:111
virtual bool Null()
Definition: rapid_json_to_struct.h:81
virtual bool String(const Ch *, rapidjson::SizeType, bool)
Definition: rapid_json_to_struct.h:91
const std::string separator_
Definition: rapid_json_to_struct.h:205
bool is_object_path()
Definition: rapid_json_to_struct.h:190
bool StartObject()
Definition: rapid_json_to_struct.h:132
virtual bool RawNumber(const Ch *, rapidjson::SizeType, bool)
enabled via kParseNumbersAsStringsFlag, string is not null-terminated (use length)
Definition: rapid_json_to_struct.h:127
bool EndObject(rapidjson::SizeType)
Definition: rapid_json_to_struct.h:141
UserResult Result
Definition: rapid_json_to_struct.h:65
UserResult result_
Definition: rapid_json_to_struct.h:188
std::list< KeyValue > keys_
Definition: rapid_json_to_struct.h:235
virtual bool Uint(unsigned)
Definition: rapid_json_to_struct.h:101
bool EndArray(rapidjson::SizeType)
Definition: rapid_json_to_struct.h:174
virtual bool Int(int)
Definition: rapid_json_to_struct.h:96
virtual void empty_array()
Definition: rapid_json_to_struct.h:123
std::string get_current_key() const
Definition: rapid_json_to_struct.h:194
static uint keys
Definition: hp_test2.cc:49
static const char separator
Definition: item_func.cc:4454
static std::string to_string(const LEX_STRING &str)
Definition: lex_string.h:50
Define rapidjson::SizeType to be std::uint64_t.
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1084
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
const mysqlrouter::sqlstring k_empty
Definition: query_entries_content_file.cc:34
typedef::std::uint64_t SizeType
Definition: my_rapidjson_size_t.h:39
struct result result
Definition: result.h:34
required string key
Definition: replication_asynchronous_connection_failover.proto:60
Definition: rapid_json_to_struct.h:207
int level
Definition: rapid_json_to_struct.h:211
bool is_array
Definition: rapid_json_to_struct.h:209
bool leaf
Definition: rapid_json_to_struct.h:212
uint64_t processed
Definition: rapid_json_to_struct.h:213
int array_idx
Definition: rapid_json_to_struct.h:210
std::string name
Definition: rapid_json_to_struct.h:208