Add project files.

This commit is contained in:
k0t9i
2023-01-16 15:33:32 +04:00
parent 0f6fb75cff
commit 3c20df7683
130 changed files with 7756 additions and 0 deletions

View 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)
{
}
};
}

View 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;
};
}

View 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;
};
}

View 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;
};
}

View 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;
};
}