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