#include "GUID.h"

namespace {
	const std::string EMPTY_GUID = "{00000000-0000-0000-0000-000000000000}";
}

GUID::GUID(const std::string& guid) {
	if(guid == EMPTY_GUID) return;
	sscanf(guid.c_str(),
		"{%8x-%4hx-%4hx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx}",
		&this->data1, &this->data2, &this->data3,
		&this->data4[0], &this->data4[1], &this->data4[2], &this->data4[3],
		&this->data4[4], &this->data4[5], &this->data4[6], &this->data4[7]);
}

void GUID::Serialize(RakNet::BitStream& outBitStream) {
	outBitStream.Write(GetData1());
	outBitStream.Write(GetData2());
	outBitStream.Write(GetData3());
	for (const auto& guidSubPart : GetData4()) {
		outBitStream.Write(guidSubPart);
	}
}

GUID::GUID() = default;
