[ox] Remove need for explicit fields count in model system, add ox::String handler to OC

This commit is contained in:
2021-07-24 20:40:11 -05:00
parent 9418f54ebc
commit 2e9b7fe871
6 changed files with 93 additions and 7 deletions

View File

@@ -10,6 +10,7 @@
#include <json/json.h>
#include <ox/model/fieldcounter.hpp>
#include <ox/model/optype.hpp>
#include <ox/model/types.hpp>
#include <ox/std/buffer.hpp>
@@ -35,7 +36,7 @@ class OrganicClawReader {
OrganicClawReader(const char *json, std::size_t buffSize);
OrganicClawReader(const Json::Value &json, int unionIdx = -1);
explicit OrganicClawReader(const Json::Value &json, int unionIdx = -1);
Error field(const char *key, int8_t *val);
Error field(const char *key, int16_t *val);
@@ -63,7 +64,10 @@ class OrganicClawReader {
Error field(const char *key, UnionView<U> val);
template<std::size_t L>
Error field(const char *key, BString<L> *val);
Error field(const char *key, BasicString<L> *val) noexcept;
template<std::size_t L>
Error field(const char *key, BString<L> *val) noexcept;
Error field(const char *key, SerStr val);
@@ -80,7 +84,7 @@ class OrganicClawReader {
std::size_t stringLength(const char *name);
template<typename T = void>
constexpr void setTypeInfo(const char* = T::TypeName, int = T::Fields) {
constexpr void setTypeInfo(const char* = T::TypeName, int = countFields<T>()) {
}
/**
@@ -141,7 +145,24 @@ Error OrganicClawReader::field(const char *key, UnionView<U> val) {
}
template<std::size_t L>
Error OrganicClawReader::field(const char *name, BString<L> *val) {
Error OrganicClawReader::field(const char *key, BasicString<L> *val) noexcept {
auto err = OxError(0);
if (targetValid()) {
const auto &jv = value(key);
if (jv.empty()) {
*val = 0;
} else if (jv.isString()) {
*val = jv.asString().c_str();
} else {
err = OxError(1, "Type mismatch");
}
}
++m_fieldIt;
return err;
}
template<std::size_t L>
Error OrganicClawReader::field(const char *name, BString<L> *val) noexcept {
return field(name, SerStr(val->data(), val->cap()));
}

View File

@@ -10,6 +10,7 @@
#include <json/json.h>
#include <ox/model/fieldcounter.hpp>
#include <ox/model/optype.hpp>
#include <ox/model/types.hpp>
#include <ox/std/buffer.hpp>
@@ -65,7 +66,7 @@ class OrganicClawWriter {
Error field(const char*, T *val);
template<typename T = void>
constexpr void setTypeInfo(const char* = T::TypeName, int = T::Fields) {
constexpr void setTypeInfo(const char* = T::TypeName, int = countFields<T>()) {
}
static constexpr auto opType() {