26#ifndef ROUTER_SRC_REST_MRS_SRC_HELPER_JSON_TEXT_TO_H_
27#define ROUTER_SRC_REST_MRS_SRC_HELPER_JSON_TEXT_TO_H_
33#include <rapidjson/document.h>
34#include <rapidjson/memorystream.h>
35#include <rapidjson/reader.h>
57template <
typename Handler,
typename Container>
58rapidjson::ParseResult
parse(Handler *
handler,
const Container &c) {
63 return {rapidjson::kParseErrorDocumentEmpty, 0};
65 rapidjson::MemoryStream memory_stream{
66 reinterpret_cast<const char *
>(&*c.begin()), c.size()};
67 rapidjson::Reader read;
69 return read.Parse<Handler::k_parse_flags>(memory_stream, *
handler);
72template <
typename Container>
73bool text_to(rapidjson::Document *doc,
const Container &c) {
80 doc->Parse(
reinterpret_cast<const char *
>(&*c.begin()), c.size());
81 return !doc->HasParseError();
84inline bool text_to(rapidjson::Document *doc,
const std::string &
str) {
85 doc->Parse(
str.c_str());
86 return !doc->HasParseError();
89inline bool text_to(rapidjson::Document *doc,
const char *
str) {
91 return !doc->HasParseError();
95 rapidjson::Document doc;
98 if (!doc.IsObject())
return false;
100 *obj = doc.GetObject();
105inline bool text_to(rapidjson::Value *val,
const std::string &
str) {
106 rapidjson::Document doc;
109 if (!doc.IsObject())
return false;
111 *val = doc.GetObject();
131template <
typename Handler,
typename Container,
typename... HandlerArgs>
134 Handler
handler(std::forward<HandlerArgs>(args)...);
136 if (
const auto parse_result = parse<Handler, Container>(&
handler, c);
137 parse_result.IsError())
144 rapidjson::Document
result;
The handler class is the interface for dynamically loadable storage engines.
Definition: handler.h:4752
Definition: expected.h:286
Define rapidjson::SizeType to be std::uint64_t.
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1077
MysqlCacheManager::Object Object
Definition: mysql_cache_manager.cc:110
stdx::expected< typename Handler::Result, rapidjson::ParseErrorCode > text_to_handler(const Container &c, HandlerArgs &&...args)
Convert text representation of json object/value to type defined by 'Handler'.
Definition: text_to.h:133
rapidjson::ParseResult parse(Handler *handler, const Container &c)
Convert text representation of json object/value to type defined by 'Handler'.
Definition: text_to.h:58
bool text_to(rapidjson::Document *doc, const Container &c)
Definition: text_to.h:73
rapidjson::Document text_to_document(const std::string &str)
Definition: text_to.h:143
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
unexpected(E) -> unexpected< E >
struct result result
Definition: result.h:34