[ox] Remove need for explicit fields count in model system, add ox::String handler to OC
This commit is contained in:
29
deps/ox/src/ox/oc/read.hpp
vendored
29
deps/ox/src/ox/oc/read.hpp
vendored
@@ -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()));
|
||||
}
|
||||
|
||||
|
3
deps/ox/src/ox/oc/write.hpp
vendored
3
deps/ox/src/ox/oc/write.hpp
vendored
@@ -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() {
|
||||
|
Reference in New Issue
Block a user