#pragma once #include #include #include namespace sp { namespace details { template void WriteField(DataBuffer& a_Buffer, const T& a_Data) { T swapped = a_Data; ToNetwork(swapped); a_Buffer << swapped; } template void ReadField(DataBuffer& a_Buffer, T& a_Data) { a_Buffer >> a_Data; FromNetwork(a_Data); } template DataBuffer WriteMessage(const TData& a_MessageData) { DataBuffer buffer; boost::pfr::for_each_field(a_MessageData, [&buffer](const auto& a_Field) { WriteField(buffer, a_Field); }); return buffer; } template void ReadMessage(DataBuffer& a_Buffer, TData& a_MessageData) { boost::pfr::for_each_field(a_MessageData, [&a_Buffer](auto& a_Field) { ReadField(a_Buffer, a_Field); }); } } // namespace details } // namespace sp