/* * Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved. */ #pragma once #include #include #include namespace keel { constexpr auto K1HdrSz = 40; ox::Result readUuidHeader(const ox::Buffer &buff) noexcept; ox::Result readUuidHeader(const char *buff, std::size_t buffLen) noexcept; ox::Error writeUuidHeader(ox::Writer_c auto *writer, const ox::UUID &uuid) noexcept { const auto hdr = ox::sfmt>("K1;{};", uuid.toString()); return write(writer, hdr); } template ox::Result readAsset(const ox::Buffer &buff) noexcept { std::size_t offset = 0; const auto err = readUuidHeader(buff).error; if (!err) { offset = K1HdrSz; // the size of K1 headers } return ox::readClaw(buff.data() + offset, buff.size() - offset); } ox::Result readAsset(ox::TypeStore *ts, const ox::Buffer &buff) noexcept; struct AssetHdr { ox::UUID uuid; ox::ClawHeader clawHdr; }; ox::Result readAssetHeader(const char *buff, std::size_t buffLen) noexcept; ox::Result readAssetHeader(const ox::Buffer &buff) noexcept; }