[ox] Cleanup serialization writers, make MC and Claw use Writer_c

This commit is contained in:
2023-06-08 21:14:27 -05:00
parent 6f5f2c7219
commit 2c8e073172
11 changed files with 100 additions and 34 deletions

View File

@@ -132,7 +132,7 @@ const std::map<std::string_view, ox::Error(*)()> tests = {
// This test doesn't confirm much, but it does show that the writer
// doesn't segfault
TestStruct ts;
return ox::writeOC(&ts).error;
return ox::writeOC(ts).error;
}
},
{
@@ -153,7 +153,7 @@ const std::map<std::string_view, ox::Error(*)()> tests = {
testIn.Struct.Int = 300;
testIn.Struct.String = "Test String 2";
auto [oc, writeErr] = ox::writeOC(&testIn);
auto [oc, writeErr] = ox::writeOC(testIn);
oxAssert(writeErr, "writeOC failed");
oxOutf("{}\n", oc.data());
auto [testOut, readErr] = ox::readOC<TestStruct>(oc.data());
@@ -205,7 +205,7 @@ const std::map<std::string_view, ox::Error(*)()> tests = {
testIn.Struct.String = "Test String 2";
testIn.unionIdx = 1;
testIn.Union.Int = 93;
oxAssert(ox::writeOC(&testIn).moveTo(&dataBuff), "Data generation failed");
oxAssert(ox::writeOC(testIn).moveTo(&dataBuff), "Data generation failed");
ox::TypeStore typeStore;
auto type = ox::buildTypeDef(&typeStore, &testIn);
oxAssert(type.error, "Descriptor write failed");
@@ -254,7 +254,7 @@ const std::map<std::string_view, ox::Error(*)()> tests = {
testIn.Struct.Int = 300;
testIn.Struct.String = "Test String 2";
auto [oc, ocErr] = ox::writeOC(&testIn);
auto [oc, ocErr] = ox::writeOC(testIn);
oxAssert(ocErr, "Data generation failed");
ox::TypeStore typeStore;
auto type = ox::buildTypeDef(&typeStore, &testIn);

View File

@@ -24,7 +24,7 @@ namespace ox {
class OrganicClawWriter {
friend Result<Buffer> writeOC(auto *val) noexcept;
friend Result<Buffer> writeOC(auto &val) noexcept;
protected:
Json::Value m_json;
@@ -242,10 +242,10 @@ Error OrganicClawWriter::field(const char *key, UnionView<U, force> val) noexcep
return OxError(0);
}
Result<Buffer> writeOC(auto *val) noexcept {
Result<Buffer> writeOC(auto &val) noexcept {
OrganicClawWriter writer;
ModelHandlerInterface handler(&writer);
oxReturnError(model(&handler, val));
oxReturnError(model(&handler, &val));
Json::StreamWriterBuilder jsonBuilder;
const auto str = Json::writeString(jsonBuilder, writer.m_json);
Buffer buff(str.size() + 1);