Add project files.
This commit is contained in:
26
L2BotCore/Domain/Serializers/Node.h
Normal file
26
L2BotCore/Domain/Serializers/Node.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace L2Bot::Domain::Serializers
|
||||
{
|
||||
struct Node
|
||||
{
|
||||
const std::string name = "";
|
||||
const std::string value = "";
|
||||
const std::vector<Node> children;
|
||||
const bool isArray = false;
|
||||
const bool isContainer = false;
|
||||
|
||||
Node() = delete;
|
||||
Node(const std::string name, const std::string value) :
|
||||
name(name), value(value)
|
||||
{
|
||||
}
|
||||
Node(const std::string name, const std::vector<Node> children, const bool isArray = false) :
|
||||
name(name), children(children), isArray(isArray), isContainer(true)
|
||||
{
|
||||
}
|
||||
};
|
||||
}
|
12
L2BotCore/Domain/Serializers/Serializable.h
Normal file
12
L2BotCore/Domain/Serializers/Serializable.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include "Node.h"
|
||||
|
||||
namespace L2Bot::Domain::Serializers
|
||||
{
|
||||
class Serializable
|
||||
{
|
||||
public:
|
||||
virtual const std::vector<Node> BuildSerializationNodes() const = 0;
|
||||
};
|
||||
}
|
57
L2BotCore/Domain/Serializers/SerializableStateContainer.h
Normal file
57
L2BotCore/Domain/Serializers/SerializableStateContainer.h
Normal file
@@ -0,0 +1,57 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include "../DTO/ObjectState.h"
|
||||
#include "Serializable.h"
|
||||
|
||||
namespace L2Bot::Domain::Serializers
|
||||
{
|
||||
template <typename T>
|
||||
class SerializableStateContainer : public Serializers::Serializable
|
||||
{
|
||||
public:
|
||||
const std::vector<Serializers::Node> BuildSerializationNodes() const override
|
||||
{
|
||||
std::vector<Serializers::Node> result;
|
||||
|
||||
for (const auto& kvp : m_Objects)
|
||||
{
|
||||
std::string operationName = "";
|
||||
switch (kvp.state)
|
||||
{
|
||||
case Enums::ObjectStateEnum::created:
|
||||
operationName = "created";
|
||||
break;
|
||||
case Enums::ObjectStateEnum::updated:
|
||||
operationName = "updated";
|
||||
break;
|
||||
case Enums::ObjectStateEnum::deleted:
|
||||
operationName = "deleted";
|
||||
break;
|
||||
}
|
||||
|
||||
if (operationName != "")
|
||||
{
|
||||
result.push_back(
|
||||
{
|
||||
m_ContainerName,
|
||||
std::vector<Serializers::Node>{ { operationName, kvp.object.BuildSerializationNodes() } }
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SerializableStateContainer(const std::vector<DTO::ObjectState<T>> objects, const std::string containerName) :
|
||||
m_Objects(objects), m_ContainerName(containerName)
|
||||
{
|
||||
|
||||
}
|
||||
SerializableStateContainer() = delete;
|
||||
virtual ~SerializableStateContainer() = default;
|
||||
private:
|
||||
const std::vector<DTO::ObjectState<T>> m_Objects;
|
||||
const std::string m_ContainerName;
|
||||
};
|
||||
}
|
57
L2BotCore/Domain/Serializers/SerializableStateContainerPtr.h
Normal file
57
L2BotCore/Domain/Serializers/SerializableStateContainerPtr.h
Normal file
@@ -0,0 +1,57 @@
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include "../DTO/ObjectState.h"
|
||||
#include "Serializable.h"
|
||||
|
||||
namespace L2Bot::Domain::Serializers
|
||||
{
|
||||
template <typename T>
|
||||
class SerializableStateContainerPtr : public Serializers::Serializable
|
||||
{
|
||||
public:
|
||||
const std::vector<Serializers::Node> BuildSerializationNodes() const override
|
||||
{
|
||||
std::vector<Serializers::Node> result;
|
||||
|
||||
for (const auto& kvp : m_Objects)
|
||||
{
|
||||
std::string operationName = "";
|
||||
switch (kvp.state)
|
||||
{
|
||||
case Enums::ObjectStateEnum::created:
|
||||
operationName = "created";
|
||||
break;
|
||||
case Enums::ObjectStateEnum::updated:
|
||||
operationName = "updated";
|
||||
break;
|
||||
case Enums::ObjectStateEnum::deleted:
|
||||
operationName = "deleted";
|
||||
break;
|
||||
}
|
||||
|
||||
if (operationName != "")
|
||||
{
|
||||
result.push_back(
|
||||
{
|
||||
m_ContainerName,
|
||||
std::vector<Serializers::Node>{ { operationName, kvp.object->BuildSerializationNodes() } }
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SerializableStateContainerPtr(const std::vector<DTO::ObjectState<T>> objects, const std::string containerName) :
|
||||
m_Objects(objects), m_ContainerName(containerName)
|
||||
{
|
||||
|
||||
}
|
||||
SerializableStateContainerPtr() = delete;
|
||||
virtual ~SerializableStateContainerPtr() = default;
|
||||
private:
|
||||
const std::vector<DTO::ObjectState<T>> m_Objects;
|
||||
const std::string m_ContainerName;
|
||||
};
|
||||
}
|
13
L2BotCore/Domain/Serializers/SerializerInterface.h
Normal file
13
L2BotCore/Domain/Serializers/SerializerInterface.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "Serializable.h"
|
||||
|
||||
namespace L2Bot::Domain::Serializers
|
||||
{
|
||||
class SerializerInterface
|
||||
{
|
||||
public:
|
||||
virtual const std::string Serialize(std::vector<Node> nodes, const bool isArray = false) const = 0;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user