#define BLITZ_INSTANCIATE_PACKETS
#include <blitz/protocol/Packets.h>

#include <blitz/protocol/PacketVisitor.h>

namespace blitz {
namespace protocol {

template <PacketType PT, typename Data>
packets::ConcretePacket<PT, Data>::ConcretePacket(const PacketDataType& a_Data) : m_Data(a_Data) {}

template <PacketType PT, typename Data>
void packets::ConcretePacket<PT, Data>::Accept(PacketVisitor& a_Visitor) const {
	a_Visitor.Visit(*this);
}

#define DeclarePacket(PacketName, packetSendType, packetSenderType)                                                                   \
	static_assert(static_cast<unsigned>(PacketSendType::packetSendType) && static_cast<unsigned>(PacketSenderType::packetSenderType));

DeclareAllPacket()

}  // namespace protocol
}  // namespace blitz
