[ox] Add writeOC Writer_c variant
This commit is contained in:
+1
-2
@@ -129,8 +129,7 @@ Error writeClaw(
|
||||
if (fmt == ClawFormat::Metal) {
|
||||
OX_RETURN_ERROR(writeMC(writer, obj));
|
||||
} else if (fmt == ClawFormat::Organic) {
|
||||
OX_REQUIRE(data, writeOC(obj));
|
||||
OX_RETURN_ERROR(writer.write(data.data(), data.size()));
|
||||
OX_RETURN_ERROR(writeOC(writer, obj));
|
||||
}
|
||||
#else
|
||||
if (fmt != ClawFormat::Metal) {
|
||||
|
||||
+13
-2
@@ -28,6 +28,7 @@ namespace ox {
|
||||
|
||||
class OrganicClawWriter {
|
||||
|
||||
friend Error writeOC(Writer_c auto &writer, auto const &val) noexcept;
|
||||
friend Result<Buffer> writeOC(const auto &val) noexcept;
|
||||
friend Result<String> writeOCString(const auto &val) noexcept;
|
||||
|
||||
@@ -254,9 +255,19 @@ Error OrganicClawWriter::field(CString key, UnionView<U, force> val) noexcept {
|
||||
return {};
|
||||
}
|
||||
|
||||
Error writeOC(Writer_c auto &writer, auto const &val) noexcept {
|
||||
OrganicClawWriter ocWriter;
|
||||
ModelHandlerInterface handler(ocWriter);
|
||||
OX_RETURN_ERROR(model(&handler, &val));
|
||||
Json::StreamWriterBuilder const jsonBuilder;
|
||||
auto const str = Json::writeString(jsonBuilder, ocWriter.m_json);
|
||||
writer.write(str.data(), str.size());
|
||||
return {};
|
||||
}
|
||||
|
||||
Result<Buffer> writeOC(auto const &val) noexcept {
|
||||
OrganicClawWriter writer;
|
||||
ModelHandlerInterface<OrganicClawWriter, OpType::Write> handler(writer);
|
||||
ModelHandlerInterface handler(writer);
|
||||
OX_RETURN_ERROR(model(&handler, &val));
|
||||
Json::StreamWriterBuilder const jsonBuilder;
|
||||
auto const str = Json::writeString(jsonBuilder, writer.m_json);
|
||||
@@ -270,7 +281,7 @@ Result<Buffer> writeOC(auto const &val) noexcept {
|
||||
|
||||
Result<String> writeOCString(auto const &val) noexcept {
|
||||
OrganicClawWriter writer;
|
||||
ModelHandlerInterface<OrganicClawWriter, OpType::Write> handler(writer);
|
||||
ModelHandlerInterface handler(writer);
|
||||
OX_RETURN_ERROR(model(&handler, &val));
|
||||
Json::StreamWriterBuilder const jsonBuilder;
|
||||
auto const str = Json::writeString(jsonBuilder, writer.m_json);
|
||||
|
||||
Reference in New Issue
Block a user