[ox/claw] Add Claw

This commit is contained in:
2020-05-06 20:38:06 -05:00
parent 9560ccf476
commit e2952ec8c1
14 changed files with 493 additions and 9 deletions

View File

@@ -125,8 +125,8 @@ std::map<std::string, ox::Error(*)()> tests = {
auto [oc, writeErr] = ox::writeOC(&testIn);
oxAssert(writeErr, "writeOC failed");
std::cout << oc.c_str() << '\n';
auto [testOut, readErr] = ox::readOC<TestStruct>(oc.c_str());
std::cout << oc.data() << '\n';
auto [testOut, readErr] = ox::readOC<TestStruct>(oc.data());
oxAssert(readErr, "readOC failed");
oxAssert(testIn.Bool == testOut->Bool, "Bool value mismatch");
@@ -176,7 +176,7 @@ std::map<std::string, ox::Error(*)()> tests = {
oxAssert(ocErr, "Data generation failed");
auto type = ox::buildTypeDef(&testIn);
oxAssert(type.error, "Descriptor write failed");
ox::walkModel<ox::OrganicClawReader>(type.value, ox::bit_cast<uint8_t*>(oc.c_str()), oc.len() + 1,
ox::walkModel<ox::OrganicClawReader>(type.value, ox::bit_cast<uint8_t*>(oc.data()), oc.size(),
[](const ox::Vector<ox::FieldName>&, const ox::Vector<ox::TypeName>&, const ox::DescriptorField &f, ox::OrganicClawReader *rdr) -> ox::Error {
//std::cout << f.fieldName.c_str() << '\n';
auto fieldName = f.fieldName.c_str();

View File

@@ -20,7 +20,7 @@ namespace ox {
class OrganicClawWriter {
template<typename T>
friend ValErr<String> writeOC(T *val);
friend ValErr<Vector<char>> writeOC(T *val);
protected:
Json::Value m_json;
@@ -131,11 +131,14 @@ Error OrganicClawWriter::field(const char *key, ox::Vector<T> *val) {
template<typename T>
ValErr<String> writeOC(T *val) {
ValErr<Vector<char>> writeOC(T *val) {
OrganicClawWriter writer;
oxReturnError(model(&writer, val));
Json::StreamWriterBuilder jsonBuilder;
return String(Json::writeString(jsonBuilder, writer.m_json).c_str());
auto str = Json::writeString(jsonBuilder, writer.m_json);
Vector<char> buff(str.size() + 1);
memcpy(buff.data(), str.c_str(), str.size() + 1);
return buff;
}
}