void item_definition::write()

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
	}
}