in src/native/diffs/core/item_definition.cpp [267:311]
void item_definition::write(io::sequential::writer &writer, serialization_options options) const
{
bool include_hashes = (options & serialization_options::include_hashes) > 0;
bool include_names = (options & serialization_options::include_names) > 0;
bool zero_size_has_no_details = (options & serialization_options::zero_size_has_no_details) > 0;
bool include_only_sha256_hash = (options & serialization_options::include_only_sha256_hash) > 0;
writer.write_uint64_t(m_length);
if ((m_length == 0) && zero_size_has_no_details)
{
return;
}
if (include_hashes)
{
if (include_only_sha256_hash)
{
auto itr = m_hashes.find(hashing::algorithm::sha256);
if (itr == m_hashes.cend())
{
throw errors::user_exception(errors::error_code::item_definition_no_sha256_hash);
}
auto &hash = itr->second;
hash.write(writer);
}
else
{
// we really shouldn't expect a lot of hashes!
writer.write_uint8_t(static_cast<uint8_t>(m_hashes.size()));
for (auto &hash_entry : m_hashes)
{
auto &hash = hash_entry.second;
hash.write(writer);
}
}
}
if (include_names)
{
// TODO: Implement
}
}