[ox] Make model system's setTypeInfo return an Error

This commit is contained in:
2023-06-09 20:49:36 -05:00
parent 7c3aaf99c2
commit e22743961a
28 changed files with 137 additions and 74 deletions

View File

@@ -103,8 +103,11 @@ class MetalClawWriter {
constexpr Error field(const char*, UnionView<U, force> val) noexcept;
template<typename T = std::nullptr_t>
constexpr void setTypeInfo(const char *name = T::TypeName, int version = T::TypeVersion,
const Vector<String>& = {}, std::size_t fields = ModelFieldCount_v<T>) noexcept;
constexpr ox::Error setTypeInfo(
const char *name = T::TypeName,
int version = T::TypeVersion,
const Vector<String>& = {},
std::size_t fields = ModelFieldCount_v<T>) noexcept;
/**
* stringLength is not implemented in MetalClawWriter
@@ -328,7 +331,7 @@ constexpr Error MetalClawWriter<Writer>::field(const char*, T *val, std::size_t
oxReturnError(m_writer.write(reinterpret_cast<const char*>(arrLen.data), arrLen.length));
MetalClawWriter<Writer> writer(m_writer);
ModelHandlerInterface handler{&writer};
handler.template setTypeInfo<T>("List", 0, {}, static_cast<std::size_t>(len));
oxReturnError(handler.template setTypeInfo<T>("List", 0, {}, static_cast<std::size_t>(len)));
// write the array
for (std::size_t i = 0; i < len; i++) {
oxReturnError(handler.field("", &val[i]));
@@ -355,7 +358,7 @@ constexpr Error MetalClawWriter<Writer>::field(const char*, const HashMap<String
MetalClawWriter<Writer> writer(m_writer);
ModelHandlerInterface handler{&writer};
// double len for both key and value
handler.setTypeInfo("Map", 0, {}, len * 2);
oxReturnError(handler.setTypeInfo("Map", 0, {}, len * 2));
// write the array
for (std::size_t i = 0; i < len; i++) {
const auto &key = keys[i];
@@ -382,7 +385,7 @@ constexpr Error MetalClawWriter<Writer>::field(const char *name, HashMap<String,
template<Writer_c Writer>
template<typename T>
constexpr void MetalClawWriter<Writer>::setTypeInfo(
constexpr ox::Error MetalClawWriter<Writer>::setTypeInfo(
const char*,
int,
const Vector<String>&,
@@ -393,6 +396,7 @@ constexpr void MetalClawWriter<Writer>::setTypeInfo(
m_presenceMapBuff.resize(fieldPresenceLen);
m_fieldPresence.setBuffer(m_presenceMapBuff.data(), m_presenceMapBuff.size());
m_fieldPresence.setFields(static_cast<int>(fields));
return {};
}
template<Writer_c Writer>