14 #include "InterfaceData.h"
16 #include <rapidjson/document.h>
17 #include <rapidjson/prettywriter.h>
18 #include <rapidjson/stringbuffer.h>
19 #include <rapidjson/writer.h>
44 rapidjson::Document d;
48 rapidjson::StringBuffer buffer;
50 rapidjson::PrettyWriter<rapidjson::StringBuffer>
writer(buffer);
53 rapidjson::Writer<rapidjson::StringBuffer>
writer(buffer);
57 return buffer.GetString();
63 rapidjson::Document::AllocatorType &allocator = d.GetAllocator();
69 rapidjson::Value v_kind;
70 v_kind.SetString(*kind_, allocator);
71 v.AddMember(
"kind", v_kind, allocator);
74 rapidjson::Value v_apiVersion;
75 v_apiVersion.SetString(*apiVersion_, allocator);
76 v.AddMember(
"apiVersion", v_apiVersion, allocator);
79 rapidjson::Value v_id;
80 v_id.SetString(*id_, allocator);
81 v.AddMember(
"id", v_id, allocator);
84 rapidjson::Value v_type;
85 v_type.SetString(*type_, allocator);
86 v.AddMember(
"type", v_type, allocator);
89 rapidjson::Value v_writer;
90 v_writer.SetString(*writer_, allocator);
91 v.AddMember(
"writer", v_writer, allocator);
93 rapidjson::Value v_readers(rapidjson::kArrayType);
94 v_readers.Reserve(readers_.size(), allocator);
95 for (
const auto &e : readers_) {
97 v.SetString(e, allocator);
98 v_readers.PushBack(v, allocator);
100 v.AddMember(
"readers", v_readers, allocator);
102 v.AddMember(
"data", *data_, allocator);
105 rapidjson::Value v_timestamp;
106 v_timestamp.SetString(*timestamp_, allocator);
107 v.AddMember(
"timestamp", v_timestamp, allocator);
114 rapidjson::Document d;
123 if (d.HasMember(
"kind") && d[
"kind"].IsString()) {
124 kind_ = d[
"kind"].GetString();
126 if (d.HasMember(
"apiVersion") && d[
"apiVersion"].IsString()) {
127 apiVersion_ = d[
"apiVersion"].GetString();
129 if (d.HasMember(
"id") && d[
"id"].IsString()) {
130 id_ = d[
"id"].GetString();
132 if (d.HasMember(
"type") && d[
"type"].IsString()) {
133 type_ = d[
"type"].GetString();
135 if (d.HasMember(
"writer") && d[
"writer"].IsString()) {
136 writer_ = d[
"writer"].GetString();
138 if (d.HasMember(
"readers") && d[
"readers"].IsArray()) {
139 const rapidjson::Value &a = d[
"readers"];
140 readers_ = std::vector<std::string>{};
142 readers_.reserve(a.Size());
143 for (
auto &v : a.GetArray()) {
144 readers_.push_back(v.GetString());
147 if (d.HasMember(
"data") && d[
"data"].IsObject()) {
148 std::shared_ptr<rapidjson::Document> d_data = std::make_shared<rapidjson::Document>();
149 d_data->CopyFrom(d[
"data"], d_data->GetAllocator());
151 if (d.HasMember(
"timestamp") && d[
"timestamp"].IsString()) {
152 timestamp_ = d[
"timestamp"].GetString();
159 std::vector<std::string> missing;
161 missing.push_back(
"kind");
163 missing.push_back(
"apiVersion");
165 missing.push_back(
"id");
167 missing.push_back(
"type");
169 missing.push_back(
"data");
171 missing.push_back(
"timestamp");
173 if (!missing.empty()) {
177 std::ostringstream s;
178 s <<
"InterfaceData is missing field" << ((missing.size() > 0) ?
"s" :
"") <<
": ";
179 for (std::vector<std::string>::size_type i = 0; i < missing.size(); ++i) {
181 if (i < (missing.size() - 1)) {
185 throw std::runtime_error(s.str());
virtual ~InterfaceData()
Destructor.
virtual void validate(bool subcall=false) const
Validate if all required fields have been set.
InterfaceData()
Constructor.
virtual std::string to_json(bool pretty=false) const
Render object to JSON.
virtual void from_json_value(const rapidjson::Value &v)
Retrieve data from JSON string.
virtual void to_json_value(rapidjson::Document &d, rapidjson::Value &v) const
Render object to JSON.
virtual void from_json(const std::string &json)
Retrieve data from JSON string.
std::optional< std::string > writer() const
Get writer value.