Struct
Create a constructor that can receive neujson Value
and get the value with the overloaded operator[]
function. Enable serialization of structures to strings by providing a toJson
function:
#include <cassert>
#include <cstdio>
#include "neujson/document.h"
#include "neujson/file_write_stream.h"
#include "neujson/pretty_writer.h"
#include "neujson/value.h"
struct SerialInfo {
::std::string serial_port_;
int32_t baud_rate_;
int32_t data_bits_;
int32_t stop_bits_;
int32_t parity_;
bool flow_control_;
bool clocal_;
explicit SerialInfo(const neujson::Value &_val) {
switch (_val.GetType()) {
case neujson::NEU_OBJECT:serial_port_ = _val["serial_port"].GetString();
baud_rate_ = _val["baud_rate"].GetInt32();
data_bits_ = _val["data_bits"].GetInt32();
stop_bits_ = _val["stop_bits"].GetInt32();
parity_ = _val["parity"].GetInt32();
flow_control_ = _val["flow_control"].GetBool();
clocal_ = _val["clocal"].GetBool();
break;
default:assert(false && "bad type");
}
}
[[nodiscard]] neujson::Value toJsonObject() const {
neujson::Value value(neujson::NEU_OBJECT);
value.AddMember("serial_port", serial_port_);
value.AddMember("baud_rate", baud_rate_);
value.AddMember("data_bits", data_bits_);
value.AddMember("stop_bits", stop_bits_);
value.AddMember("parity", parity_);
value.AddMember("flow_control", flow_control_);
value.AddMember("clocal", clocal_);
return value;
}
};
int main() {
neujson::Value value(neujson::NEU_OBJECT);
value.AddMember("serial_port", "/dev/cu.usbserial-AB0JHQVJ");
value.AddMember("baud_rate", 115200);
value.AddMember("data_bits", 8);
value.AddMember("stop_bits", 1);
value.AddMember("parity", 0);
value.AddMember("flow_control", false);
value.AddMember("clocal", true);
SerialInfo serial_info(value);
value = serial_info.toJsonObject();
char writeBuffer[65536];
neujson::FileWriteStream out(stdout, writeBuffer, sizeof(writeBuffer));
neujson::PrettyWriter<neujson::FileWriteStream> pretty_writer(out);
pretty_writer.SetIndent(' ', 2);
value.WriteTo(pretty_writer);
return 0;
}
Output:
{
"serial_port": "/dev/cu.usbserial-AB0JHQVJ",
"baud_rate": 115200,
"data_bits": 8,
"stop_bits": 1,
"parity": 0,
"flow_control": false,
"clocal": true
}