From f40ee7b8498671cf8cf96d338b2395e78a3d3fda Mon Sep 17 00:00:00 2001 From: chatlanin Date: Fri, 5 Jul 2024 10:59:58 +0300 Subject: [PATCH] add json converter --- src/hack/exception/exception.hpp | 10 +++++----- src/hack/utils/json_converter.hpp | 16 ++++++++++++++++ src/meson.build | 1 + 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 src/hack/utils/json_converter.hpp diff --git a/src/hack/exception/exception.hpp b/src/hack/exception/exception.hpp index 076ccec..a644a66 100644 --- a/src/hack/exception/exception.hpp +++ b/src/hack/exception/exception.hpp @@ -10,6 +10,7 @@ #define DEF_FILE_NAME() std::experimental::source_location::current().file_name() #include "hack/logger/logger.hpp" +#include "hack/utils/json_converter.hpp" namespace hack { @@ -17,7 +18,7 @@ namespace hack const std::string SET_LOG = "set_log"; - class exception + class exception : public utils::json_converter { public: exception(const std::string loc = DEF_LOCATION()) : m_location { loc } {} @@ -32,9 +33,6 @@ namespace hack template void set_params(std::string key, Param value) { m_params[key] = value; } - template - void set_transaction(Transaction& tr) { m_params["transaction"] = tr.convert_to_json(); } - // если что-то не значительное, но в больших обемах, то можноиспользовать этот метод // на выходе будет что-то типа { "arg_1" : 123, "arg_2" : "value" } template @@ -44,6 +42,8 @@ namespace hack ([&] { m_params["arg_" + std::to_string(++i)] = args; }(), ...); } + template + void set_transaction(Transaction& tr) { m_params["transaction"] = tr.convert_to_json(); } template void commit(const std::filesystem::path file_name = DEF_FILE_NAME(), std::string line = DEF_LINE()) @@ -81,7 +81,7 @@ namespace hack return r; } - JSON convert_to_json() + JSON convert_to_json() override { JSON j; j["description"] = m_description; diff --git a/src/hack/utils/json_converter.hpp b/src/hack/utils/json_converter.hpp new file mode 100644 index 0000000..602980f --- /dev/null +++ b/src/hack/utils/json_converter.hpp @@ -0,0 +1,16 @@ +// Данный интерфейс предназначен для более понятного и не меняющегося апи по преобразованию данных в json формат и обратно. +// Любой класс, который этого требует должен наследоваться от этого интерфейса чтобы не городить зоопарк разноименных для этого методов. +// Возможно в будущем я либо напишу рефлектор либо это будет вынесено в отдельную hack_cpp + +#pragma once + +namespace hack::utils +{ + template + struct json_converter + { + json_converter() = default; + virtual ~json_converter() = default; + virtual JSON convert_to_json() = 0; + }; +} diff --git a/src/meson.build b/src/meson.build index ca92d91..ccd46c4 100755 --- a/src/meson.build +++ b/src/meson.build @@ -34,6 +34,7 @@ headers = [ 'hack/utils/func_query.hpp', 'hack/utils/singleton.hpp', + 'hack/utils/json_converter.hpp', 'hack/utils/utils.hpp', 'hack/view/color.hpp',