9 #ifndef CLUON_FROMJSONVISITOR_HPP 10 #define CLUON_FROMJSONVISITOR_HPP 13 #include "cluon/any/any.hpp" 31 JSONKeyValue &operator=(JSONKeyValue &&) =
delete;
34 JSONKeyValue() =
default;
35 JSONKeyValue(
const JSONKeyValue &) =
default;
36 JSONKeyValue(JSONKeyValue &&) =
default;
37 JSONKeyValue &operator=(
const JSONKeyValue &) =
default;
38 ~JSONKeyValue() =
default;
41 std::string m_key{
""};
57 FromJSONVisitor(std::map<std::string, FromJSONVisitor::JSONKeyValue> &preset) noexcept;
69 void decodeFrom(std::istream &in) noexcept;
75 void preVisit(int32_t
id,
const std::string &shortName,
const std::string &longName) noexcept;
76 void postVisit() noexcept;
78 void visit(uint32_t
id, std::string &&typeName, std::string &&name,
bool &v) noexcept;
79 void visit(uint32_t
id, std::string &&typeName, std::string &&name,
char &v) noexcept;
80 void visit(uint32_t
id, std::string &&typeName, std::string &&name, int8_t &v) noexcept;
81 void visit(uint32_t
id, std::string &&typeName, std::string &&name, uint8_t &v) noexcept;
82 void visit(uint32_t
id, std::string &&typeName, std::string &&name, int16_t &v) noexcept;
83 void visit(uint32_t
id, std::string &&typeName, std::string &&name, uint16_t &v) noexcept;
84 void visit(uint32_t
id, std::string &&typeName, std::string &&name, int32_t &v) noexcept;
85 void visit(uint32_t
id, std::string &&typeName, std::string &&name, uint32_t &v) noexcept;
86 void visit(uint32_t
id, std::string &&typeName, std::string &&name, int64_t &v) noexcept;
87 void visit(uint32_t
id, std::string &&typeName, std::string &&name, uint64_t &v) noexcept;
88 void visit(uint32_t
id, std::string &&typeName, std::string &&name,
float &v) noexcept;
89 void visit(uint32_t
id, std::string &&typeName, std::string &&name,
double &v) noexcept;
90 void visit(uint32_t
id, std::string &&typeName, std::string &&name, std::string &v) noexcept;
93 void visit(uint32_t &
id, std::string &&typeName, std::string &&name, T &value) noexcept {
97 if (0 < m_keyValues.count(name)) {
99 std::map<std::string, FromJSONVisitor::JSONKeyValue> v
100 = linb::any_cast<std::map<std::string, FromJSONVisitor::JSONKeyValue>>(m_keyValues[name].m_value);
102 value.accept(nestedJSONDecoder);
103 }
catch (
const linb::bad_any_cast &) {
115 static std::string decodeBase64(
const std::string &input) noexcept;
118 std::map<std::string, FromJSONVisitor::JSONKeyValue> readKeyValues(std::string &input) noexcept;
121 std::map<std::string, FromJSONVisitor::JSONKeyValue> m_data{};
122 std::map<std::string, FromJSONVisitor::JSONKeyValue> &m_keyValues;
#define LIBCLUON_API
Definition: cluon.hpp:56
Definition: FromJSONVisitor.hpp:25
JSONConstants
Definition: JSONConstants.hpp:16
void visit(uint32_t &id, std::string &&typeName, std::string &&name, T &value) noexcept
Definition: FromJSONVisitor.hpp:93