// Glaze Library // For the license information refer to glaze.hpp #pragma once #if __cpp_exceptions #include "glaze/exceptions/core_exceptions.hpp" #include "glaze/msgpack.hpp" namespace glz::ex { template void read_msgpack(T& value, Buffer&& buffer) { const auto ec = glz::read_msgpack(value, std::forward(buffer)); if (ec) { throw std::runtime_error("read_msgpack error"); } } template [[nodiscard]] T read_msgpack(Buffer&& buffer) { const auto ex = glz::read_msgpack(std::forward(buffer)); if (!ex) { throw std::runtime_error("read_msgpack error"); } return ex.value(); } template void read_file_msgpack(T& value, const sv file_name, auto&& buffer) { const auto ec = glz::read_file_msgpack(value, file_name, buffer); if (ec == glz::error_code::file_open_failure) { throw std::runtime_error("file failed to open: " + std::string(file_name)); } else if (ec) { throw std::runtime_error("read_file_msgpack error for: " + std::string(file_name)); } } } namespace glz::ex { template void write_msgpack(T&& value, Buffer&& buffer) { const auto ec = glz::write_msgpack(std::forward(value), std::forward(buffer)); if (bool(ec)) [[unlikely]] { throw std::runtime_error("write_msgpack error"); } } template [[nodiscard]] auto write_msgpack(T&& value) { auto result = glz::write_msgpack(std::forward(value)); if (result) { return result.value(); } else { throw std::runtime_error("write_msgpack error"); } } template void write_file_msgpack(T&& value, const sv file_name, auto&& buffer) { const auto ec = glz::write_file_msgpack(std::forward(value), file_name, buffer); if (ec == glz::error_code::file_open_failure) { throw std::runtime_error("file failed to open: " + std::string(file_name)); } else if (ec) { throw std::runtime_error("write_file_msgpack error for: " + std::string(file_name)); } } } #endif