[ox/{mc,oc}] Improve noexcept correctness
This commit is contained in:
33
deps/ox/src/ox/oc/read.cpp
vendored
33
deps/ox/src/ox/oc/read.cpp
vendored
@@ -30,12 +30,12 @@ OrganicClawReader::OrganicClawReader(const char *json, std::size_t jsonLen) {
|
||||
}
|
||||
}
|
||||
|
||||
OrganicClawReader::OrganicClawReader(const Json::Value &json, int unionIdx):
|
||||
OrganicClawReader::OrganicClawReader(const Json::Value &json, int unionIdx) noexcept:
|
||||
m_json(json),
|
||||
m_unionIdx(unionIdx) {
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, int8_t *val) {
|
||||
Error OrganicClawReader::field(const char *key, int8_t *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -51,7 +51,7 @@ Error OrganicClawReader::field(const char *key, int8_t *val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, int16_t *val) {
|
||||
Error OrganicClawReader::field(const char *key, int16_t *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -67,7 +67,7 @@ Error OrganicClawReader::field(const char *key, int16_t *val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, int32_t *val) {
|
||||
Error OrganicClawReader::field(const char *key, int32_t *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -83,7 +83,7 @@ Error OrganicClawReader::field(const char *key, int32_t *val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, int64_t *val) {
|
||||
Error OrganicClawReader::field(const char *key, int64_t *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -100,7 +100,7 @@ Error OrganicClawReader::field(const char *key, int64_t *val) {
|
||||
}
|
||||
|
||||
|
||||
Error OrganicClawReader::field(const char *key, uint8_t *val) {
|
||||
Error OrganicClawReader::field(const char *key, uint8_t *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -116,7 +116,7 @@ Error OrganicClawReader::field(const char *key, uint8_t *val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, uint16_t *val) {
|
||||
Error OrganicClawReader::field(const char *key, uint16_t *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -132,7 +132,7 @@ Error OrganicClawReader::field(const char *key, uint16_t *val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, uint32_t *val) {
|
||||
Error OrganicClawReader::field(const char *key, uint32_t *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -148,7 +148,7 @@ Error OrganicClawReader::field(const char *key, uint32_t *val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, uint64_t *val) {
|
||||
Error OrganicClawReader::field(const char *key, uint64_t *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -164,7 +164,7 @@ Error OrganicClawReader::field(const char *key, uint64_t *val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, bool *val) {
|
||||
Error OrganicClawReader::field(const char *key, bool *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -180,7 +180,7 @@ Error OrganicClawReader::field(const char *key, bool *val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Error OrganicClawReader::field(const char *key, SerStr val) {
|
||||
Error OrganicClawReader::field(const char *key, SerStr val) noexcept {
|
||||
auto err = OxError(0);
|
||||
const char *begin = nullptr, *end = nullptr;
|
||||
const auto &jv = value(key);
|
||||
@@ -208,7 +208,7 @@ Error OrganicClawReader::field(const char *key, SerStr val) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Result<std::size_t> OrganicClawReader::arrayLength(const char *key, bool) {
|
||||
Result<std::size_t> OrganicClawReader::arrayLength(const char *key, bool) noexcept {
|
||||
const auto &jv = value(key);
|
||||
if (jv.empty()) {
|
||||
return 0;
|
||||
@@ -219,7 +219,8 @@ Result<std::size_t> OrganicClawReader::arrayLength(const char *key, bool) {
|
||||
return OxError(1, "Type mismatch");
|
||||
}
|
||||
|
||||
[[nodiscard]] std::size_t OrganicClawReader::stringLength(const char *key) {
|
||||
[[nodiscard]]
|
||||
std::size_t OrganicClawReader::stringLength(const char *key) noexcept {
|
||||
const char *begin = nullptr, *end = nullptr;
|
||||
const auto &jv = value(key);
|
||||
if (jv.empty()) {
|
||||
@@ -232,15 +233,15 @@ Result<std::size_t> OrganicClawReader::arrayLength(const char *key, bool) {
|
||||
return OxError(1, "Type mismatch");
|
||||
}
|
||||
|
||||
OrganicClawReader OrganicClawReader::child(const char *key, int unionIdx) {
|
||||
OrganicClawReader OrganicClawReader::child(const char *key, int unionIdx) noexcept {
|
||||
return OrganicClawReader(m_json[key], unionIdx);
|
||||
}
|
||||
|
||||
bool OrganicClawReader::fieldPresent(const char *key) {
|
||||
bool OrganicClawReader::fieldPresent(const char *key) noexcept {
|
||||
return !m_json[key].empty();
|
||||
}
|
||||
|
||||
Json::Value &OrganicClawReader::value(const char *key) {
|
||||
Json::Value &OrganicClawReader::value(const char *key) noexcept {
|
||||
if (m_json.isArray()) {
|
||||
return m_json[m_fieldIt];
|
||||
} else {
|
||||
|
66
deps/ox/src/ox/oc/read.hpp
vendored
66
deps/ox/src/ox/oc/read.hpp
vendored
@@ -12,6 +12,7 @@
|
||||
|
||||
#include <ox/model/fieldcounter.hpp>
|
||||
#include <ox/model/optype.hpp>
|
||||
#include <ox/model/typenamecatcher.hpp>
|
||||
#include <ox/model/types.hpp>
|
||||
#include <ox/std/buffer.hpp>
|
||||
#include <ox/std/byteswap.hpp>
|
||||
@@ -30,38 +31,38 @@ class OrganicClawReader {
|
||||
int m_unionIdx = -1;
|
||||
|
||||
public:
|
||||
OrganicClawReader() = default;
|
||||
OrganicClawReader() noexcept = default;
|
||||
|
||||
OrganicClawReader(const uint8_t *buff, std::size_t buffSize);
|
||||
|
||||
OrganicClawReader(const char *json, std::size_t buffSize);
|
||||
|
||||
explicit OrganicClawReader(const Json::Value &json, int unionIdx = -1);
|
||||
explicit OrganicClawReader(const Json::Value &json, int unionIdx = -1) noexcept;
|
||||
|
||||
Error field(const char *key, int8_t *val);
|
||||
Error field(const char *key, int16_t *val);
|
||||
Error field(const char *key, int32_t *val);
|
||||
Error field(const char *key, int64_t *val);
|
||||
Error field(const char *key, int8_t *val) noexcept;
|
||||
Error field(const char *key, int16_t *val) noexcept;
|
||||
Error field(const char *key, int32_t *val) noexcept;
|
||||
Error field(const char *key, int64_t *val) noexcept;
|
||||
|
||||
Error field(const char *key, uint8_t *val);
|
||||
Error field(const char *key, uint16_t *val);
|
||||
Error field(const char *key, uint32_t *val);
|
||||
Error field(const char *key, uint64_t *val);
|
||||
Error field(const char *key, uint8_t *val) noexcept;
|
||||
Error field(const char *key, uint16_t *val) noexcept;
|
||||
Error field(const char *key, uint32_t *val) noexcept;
|
||||
Error field(const char *key, uint64_t *val) noexcept;
|
||||
|
||||
Error field(const char *key, bool *val);
|
||||
Error field(const char *key, bool *val) noexcept;
|
||||
|
||||
// array handler
|
||||
template<typename T>
|
||||
Error field(const char *key, T *val, std::size_t len);
|
||||
Error field(const char *key, T *val, std::size_t len) noexcept;
|
||||
|
||||
template<typename T>
|
||||
Error field(const char*, HashMap<String, T> *val);
|
||||
Error field(const char*, HashMap<String, T> *val) noexcept;
|
||||
|
||||
template<typename T>
|
||||
Error field(const char *key, T *val);
|
||||
Error field(const char *key, T *val) noexcept;
|
||||
|
||||
template<typename U>
|
||||
Error field(const char *key, UnionView<U> val);
|
||||
Error field(const char *key, UnionView<U> val) noexcept;
|
||||
|
||||
template<std::size_t L>
|
||||
Error field(const char *key, BasicString<L> *val) noexcept;
|
||||
@@ -69,49 +70,48 @@ class OrganicClawReader {
|
||||
template<std::size_t L>
|
||||
Error field(const char *key, BString<L> *val) noexcept;
|
||||
|
||||
Error field(const char *key, SerStr val);
|
||||
Error field(const char *key, SerStr val) noexcept;
|
||||
|
||||
/**
|
||||
* Reads an array length from the current location in the buffer.
|
||||
* @param pass indicates that the parsing should iterate past the array length
|
||||
*/
|
||||
Result<std::size_t> arrayLength(const char *key, bool pass = true);
|
||||
Result<std::size_t> arrayLength(const char *key, bool pass = true) noexcept;
|
||||
|
||||
/**
|
||||
* Reads an string length from the current location in the buffer.
|
||||
*/
|
||||
[[nodiscard]]
|
||||
std::size_t stringLength(const char *name);
|
||||
std::size_t stringLength(const char *name) noexcept;
|
||||
|
||||
template<typename T = void>
|
||||
constexpr void setTypeInfo(const char* = T::TypeName, int = countFields<T>()) {
|
||||
constexpr void setTypeInfo(const char* = getModelTypeName<T>(), int = countFields<T>()) noexcept {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a OrganicClawReader to parse a child object.
|
||||
*/
|
||||
[[nodiscard]]
|
||||
OrganicClawReader child(const char *key, int unionIdx = -1);
|
||||
OrganicClawReader child(const char *key, int unionIdx = -1) noexcept;
|
||||
|
||||
// compatibility stub
|
||||
constexpr void nextField() noexcept {}
|
||||
|
||||
bool fieldPresent(const char *key);
|
||||
bool fieldPresent(const char *key) noexcept;
|
||||
|
||||
static constexpr auto opType() {
|
||||
static constexpr auto opType() noexcept {
|
||||
return OpType::Read;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Json::Value &value(const char *key);
|
||||
Json::Value &value(const char *key) noexcept;
|
||||
|
||||
bool targetValid() noexcept;
|
||||
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
Error OrganicClawReader::field(const char *key, T *val) {
|
||||
Error OrganicClawReader::field(const char *key, T *val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if constexpr(isVector_v<T>) {
|
||||
return field(key, val->data(), val->size());
|
||||
@@ -129,7 +129,7 @@ Error OrganicClawReader::field(const char *key, T *val) {
|
||||
}
|
||||
|
||||
template<typename U>
|
||||
Error OrganicClawReader::field(const char *key, UnionView<U> val) {
|
||||
Error OrganicClawReader::field(const char *key, UnionView<U> val) noexcept {
|
||||
auto err = OxError(0);
|
||||
if (targetValid()) {
|
||||
const auto &jv = value(key);
|
||||
@@ -162,13 +162,13 @@ Error OrganicClawReader::field(const char *key, BasicString<L> *val) noexcept {
|
||||
}
|
||||
|
||||
template<std::size_t L>
|
||||
Error OrganicClawReader::field(const char *name, BString<L> *val) noexcept {
|
||||
return field(name, SerStr(val->data(), val->cap()));
|
||||
Error OrganicClawReader::field(const char *key, BString<L> *val) noexcept {
|
||||
return field(key, SerStr(val->data(), val->cap()));
|
||||
}
|
||||
|
||||
// array handler
|
||||
template<typename T>
|
||||
Error OrganicClawReader::field(const char *key, T *val, std::size_t valLen) {
|
||||
Error OrganicClawReader::field(const char *key, T *val, std::size_t valLen) noexcept {
|
||||
const auto &srcVal = value(key);
|
||||
auto srcSize = srcVal.size();
|
||||
if (srcSize > valLen) {
|
||||
@@ -182,7 +182,7 @@ Error OrganicClawReader::field(const char *key, T *val, std::size_t valLen) {
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Error OrganicClawReader::field(const char *key, HashMap<String, T> *val) {
|
||||
Error OrganicClawReader::field(const char *key, HashMap<String, T> *val) noexcept {
|
||||
const auto &srcVal = value(key);
|
||||
auto keys = srcVal.getMemberNames();
|
||||
auto srcSize = srcVal.size();
|
||||
@@ -214,19 +214,19 @@ Error readOC(const char *json, std::size_t jsonSize, T *val) noexcept {
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Result<T> readOC(const char *json, std::size_t jsonLen) {
|
||||
Result<T> readOC(const char *json, std::size_t jsonLen) noexcept {
|
||||
T val;
|
||||
oxReturnError(readOC(json, jsonLen, &val));
|
||||
return move(val);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Result<T> readOC(const char *json) {
|
||||
Result<T> readOC(const char *json) noexcept {
|
||||
return readOC<T>(json, ox_strlen(json));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Result<T> readOC(const Buffer &buff) {
|
||||
Result<T> readOC(const Buffer &buff) noexcept {
|
||||
return readOC<T>(buff.data(), buff.size());
|
||||
}
|
||||
|
||||
|
28
deps/ox/src/ox/oc/write.cpp
vendored
28
deps/ox/src/ox/oc/write.cpp
vendored
@@ -10,15 +10,15 @@
|
||||
|
||||
namespace ox {
|
||||
|
||||
OrganicClawWriter::OrganicClawWriter(int unionIdx): m_unionIdx(unionIdx) {
|
||||
OrganicClawWriter::OrganicClawWriter(int unionIdx) noexcept: m_unionIdx(unionIdx) {
|
||||
}
|
||||
|
||||
OrganicClawWriter::OrganicClawWriter(Json::Value json, int unionIdx):
|
||||
OrganicClawWriter::OrganicClawWriter(Json::Value json, int unionIdx) noexcept:
|
||||
m_json(json),
|
||||
m_unionIdx(unionIdx) {
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, int8_t *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const int8_t *val) noexcept {
|
||||
if (*val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -26,7 +26,7 @@ Error OrganicClawWriter::field(const char *key, int8_t *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, int16_t *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const int16_t *val) noexcept {
|
||||
if (*val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -34,7 +34,7 @@ Error OrganicClawWriter::field(const char *key, int16_t *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, int32_t *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const int32_t *val) noexcept {
|
||||
if (*val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -42,7 +42,7 @@ Error OrganicClawWriter::field(const char *key, int32_t *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, int64_t *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const int64_t *val) noexcept {
|
||||
if (*val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -51,7 +51,7 @@ Error OrganicClawWriter::field(const char *key, int64_t *val) {
|
||||
}
|
||||
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, uint8_t *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const uint8_t *val) noexcept {
|
||||
if (*val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -59,7 +59,7 @@ Error OrganicClawWriter::field(const char *key, uint8_t *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, uint16_t *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const uint16_t *val) noexcept {
|
||||
if (targetValid() && *val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -67,7 +67,7 @@ Error OrganicClawWriter::field(const char *key, uint16_t *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, uint32_t *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const uint32_t *val) noexcept {
|
||||
if (targetValid() && *val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -75,7 +75,7 @@ Error OrganicClawWriter::field(const char *key, uint32_t *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, uint64_t *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const uint64_t *val) noexcept {
|
||||
if (targetValid() && *val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -83,7 +83,7 @@ Error OrganicClawWriter::field(const char *key, uint64_t *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, bool *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const bool *val) noexcept {
|
||||
if (targetValid() && *val) {
|
||||
value(key) = *val;
|
||||
}
|
||||
@@ -91,7 +91,7 @@ Error OrganicClawWriter::field(const char *key, bool *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, String *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const String *val) noexcept {
|
||||
if (targetValid() && val->len()) {
|
||||
value(key) = val->c_str();
|
||||
}
|
||||
@@ -99,7 +99,7 @@ Error OrganicClawWriter::field(const char *key, String *val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Error OrganicClawWriter::field(const char *key, SerStr val) {
|
||||
Error OrganicClawWriter::field(const char *key, SerStr val) noexcept {
|
||||
if (targetValid() && val.len()) {
|
||||
value(key) = val.c_str();
|
||||
}
|
||||
@@ -107,7 +107,7 @@ Error OrganicClawWriter::field(const char *key, SerStr val) {
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
Json::Value &OrganicClawWriter::value(const char *key) {
|
||||
Json::Value &OrganicClawWriter::value(const char *key) noexcept {
|
||||
if (m_json.isArray()) {
|
||||
return m_json[m_fieldIt];
|
||||
} else {
|
||||
|
60
deps/ox/src/ox/oc/write.hpp
vendored
60
deps/ox/src/ox/oc/write.hpp
vendored
@@ -13,6 +13,7 @@
|
||||
#include <ox/model/fieldcounter.hpp>
|
||||
#include <ox/model/optype.hpp>
|
||||
#include <ox/model/types.hpp>
|
||||
#include <ox/model/typenamecatcher.hpp>
|
||||
#include <ox/std/buffer.hpp>
|
||||
#include <ox/std/hashmap.hpp>
|
||||
#include <ox/std/string.hpp>
|
||||
@@ -22,7 +23,7 @@ namespace ox {
|
||||
class OrganicClawWriter {
|
||||
|
||||
template<typename T>
|
||||
friend Result<Buffer> writeOC(T *val);
|
||||
friend Result<Buffer> writeOC(T *val) noexcept;
|
||||
|
||||
protected:
|
||||
Json::Value m_json;
|
||||
@@ -30,62 +31,62 @@ class OrganicClawWriter {
|
||||
int m_unionIdx = -1;
|
||||
|
||||
public:
|
||||
OrganicClawWriter(int unionIdx = -1);
|
||||
explicit OrganicClawWriter(int unionIdx = -1) noexcept;
|
||||
|
||||
OrganicClawWriter(Json::Value json, int unionIdx = -1);
|
||||
explicit OrganicClawWriter(Json::Value json, int unionIdx = -1) noexcept;
|
||||
|
||||
Error field(const char*, int8_t *val);
|
||||
Error field(const char*, int16_t *val);
|
||||
Error field(const char*, int32_t *val);
|
||||
Error field(const char*, int64_t *val);
|
||||
Error field(const char*, const int8_t *val) noexcept;
|
||||
Error field(const char*, const int16_t *val) noexcept;
|
||||
Error field(const char*, const int32_t *val) noexcept;
|
||||
Error field(const char*, const int64_t *val) noexcept;
|
||||
|
||||
Error field(const char*, uint8_t *val);
|
||||
Error field(const char*, uint16_t *val);
|
||||
Error field(const char*, uint32_t *val);
|
||||
Error field(const char*, uint64_t *val);
|
||||
Error field(const char*, const uint8_t *val) noexcept;
|
||||
Error field(const char*, const uint16_t *val) noexcept;
|
||||
Error field(const char*, const uint32_t *val) noexcept;
|
||||
Error field(const char*, const uint64_t *val) noexcept;
|
||||
|
||||
Error field(const char*, bool *val);
|
||||
Error field(const char*, const bool *val) noexcept;
|
||||
|
||||
template<typename T>
|
||||
Error field(const char*, T *val, std::size_t len);
|
||||
Error field(const char*, T *val, std::size_t len) noexcept;
|
||||
|
||||
template<typename U>
|
||||
Error field(const char*, UnionView<U> val);
|
||||
Error field(const char*, UnionView<U> val) noexcept;
|
||||
|
||||
template<typename T>
|
||||
Error field(const char*, HashMap<String, T> *val);
|
||||
Error field(const char*, const HashMap<String, T> *val) noexcept;
|
||||
|
||||
template<std::size_t L>
|
||||
Error field(const char*, BString<L> *val);
|
||||
Error field(const char*, const BString<L> *val) noexcept;
|
||||
|
||||
Error field(const char*, String *val);
|
||||
Error field(const char*, const String *val) noexcept;
|
||||
|
||||
Error field(const char*, SerStr val);
|
||||
Error field(const char*, SerStr val) noexcept;
|
||||
|
||||
template<typename T>
|
||||
Error field(const char*, T *val);
|
||||
Error field(const char*, T *val) noexcept;
|
||||
|
||||
template<typename T = void>
|
||||
constexpr void setTypeInfo(const char* = T::TypeName, int = countFields<T>()) {
|
||||
constexpr void setTypeInfo(const char* = T::TypeName, int = countFields<T>()) noexcept {
|
||||
}
|
||||
|
||||
static constexpr auto opType() {
|
||||
static constexpr auto opType() noexcept {
|
||||
return OpType::Write;
|
||||
}
|
||||
|
||||
private:
|
||||
[[nodiscard]]
|
||||
constexpr bool targetValid() noexcept {
|
||||
constexpr bool targetValid() const noexcept {
|
||||
return static_cast<int>(m_fieldIt) == m_unionIdx || m_unionIdx == -1;
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
Json::Value &value(const char *key);
|
||||
Json::Value &value(const char *key) noexcept;
|
||||
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
Error OrganicClawWriter::field(const char *key, T *val, std::size_t len) {
|
||||
Error OrganicClawWriter::field(const char *key, T *val, std::size_t len) noexcept {
|
||||
if (targetValid()) {
|
||||
OrganicClawWriter w((Json::Value(Json::arrayValue)));
|
||||
for (std::size_t i = 0; i < len; ++i) {
|
||||
@@ -98,12 +99,12 @@ Error OrganicClawWriter::field(const char *key, T *val, std::size_t len) {
|
||||
}
|
||||
|
||||
template<std::size_t L>
|
||||
Error OrganicClawWriter::field(const char *key, BString<L> *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const BString<L> *val) noexcept {
|
||||
return field(key, SerStr(val->data(), val->cap()));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Error OrganicClawWriter::field(const char *key, T *val) {
|
||||
Error OrganicClawWriter::field(const char *key, T *val) noexcept {
|
||||
if constexpr(isVector_v<T>) {
|
||||
return field(key, val->data(), val->size());
|
||||
} else if (val && targetValid()) {
|
||||
@@ -118,7 +119,7 @@ Error OrganicClawWriter::field(const char *key, T *val) {
|
||||
}
|
||||
|
||||
template<typename U>
|
||||
Error OrganicClawWriter::field(const char *key, UnionView<U> val) {
|
||||
Error OrganicClawWriter::field(const char *key, UnionView<U> val) noexcept {
|
||||
if (targetValid()) {
|
||||
OrganicClawWriter w(val.idx());
|
||||
oxReturnError(model(&w, val.get()));
|
||||
@@ -131,7 +132,7 @@ Error OrganicClawWriter::field(const char *key, UnionView<U> val) {
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Error OrganicClawWriter::field(const char *key, HashMap<String, T> *val) {
|
||||
Error OrganicClawWriter::field(const char *key, const HashMap<String, T> *val) noexcept {
|
||||
if (targetValid()) {
|
||||
const auto &keys = val->keys();
|
||||
OrganicClawWriter w;
|
||||
@@ -146,8 +147,9 @@ Error OrganicClawWriter::field(const char *key, HashMap<String, T> *val) {
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Result<Buffer> writeOC(T *val) {
|
||||
Result<Buffer> writeOC(T *val) noexcept {
|
||||
OrganicClawWriter writer;
|
||||
writer.template setTypeInfo<T>();
|
||||
oxReturnError(model(&writer, val));
|
||||
Json::StreamWriterBuilder jsonBuilder;
|
||||
const auto str = Json::writeString(jsonBuilder, writer.m_json);
|
||||
|
Reference in New Issue
Block a user