#pragma once #include #include namespace sc { struct CodecError { std::string message; }; // C++20 does not provide std::expected. Use a variant-based result type so // fallible codec operations do not rely on exceptions. template using CodecResult = std::variant; template constexpr bool is_codec_error(const CodecResult& result) noexcept { return std::holds_alternative(result); } template T& codec_value(CodecResult& result) { return std::get(result); } template const T& codec_value(const CodecResult& result) { return std::get(result); } template CodecError& codec_error(CodecResult& result) { return std::get(result); } template const CodecError& codec_error(const CodecResult& result) { return std::get(result); } } // namespace sc