updated build system
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
This commit is contained in:
@ -25,16 +25,12 @@
|
||||
#include "utils/config.hpp"
|
||||
|
||||
namespace repertory::utils::error {
|
||||
[[nodiscard]] auto create_error_message(std::vector<std::string_view> items)
|
||||
-> std::string;
|
||||
[[nodiscard]] auto
|
||||
create_error_message(std::vector<std::string_view> items) -> std::string;
|
||||
|
||||
[[nodiscard]] auto create_error_message(std::string_view function_name,
|
||||
std::vector<std::string_view> items)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] auto create_exception(std::string_view function_name,
|
||||
std::vector<std::string_view> items)
|
||||
-> std::runtime_error;
|
||||
[[nodiscard]] auto
|
||||
create_exception(std::string_view function_name,
|
||||
std::vector<std::string_view> items) -> std::runtime_error;
|
||||
|
||||
struct i_exception_handler {
|
||||
virtual ~i_exception_handler() {}
|
||||
@ -44,11 +40,6 @@ struct i_exception_handler {
|
||||
auto operator=(const i_exception_handler &) noexcept = delete;
|
||||
auto operator=(i_exception_handler &&) noexcept = delete;
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
virtual void handle_debug(std::string_view function_name,
|
||||
std::string_view msg) const = 0;
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
virtual void handle_error(std::string_view function_name,
|
||||
std::string_view msg) const = 0;
|
||||
|
||||
@ -57,128 +48,56 @@ struct i_exception_handler {
|
||||
virtual void handle_exception(std::string_view function_name,
|
||||
const std::exception &ex) const = 0;
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
virtual void handle_info(std::string_view function_name,
|
||||
std::string_view msg) const = 0;
|
||||
|
||||
virtual void handle_trace(std::string_view function_name,
|
||||
std::string_view msg) const = 0;
|
||||
|
||||
virtual void handle_warn(std::string_view function_name,
|
||||
std::string_view msg) const = 0;
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
protected:
|
||||
i_exception_handler() = default;
|
||||
};
|
||||
|
||||
struct iostream_exception_handler final : i_exception_handler {
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
void handle_debug(std::string_view function_name,
|
||||
std::string_view msg) const override {
|
||||
std::cout << create_error_message(function_name,
|
||||
{
|
||||
"debug",
|
||||
msg,
|
||||
})
|
||||
<< std::endl;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
void handle_error(std::string_view function_name,
|
||||
std::string_view msg) const override {
|
||||
std::cerr << create_error_message(function_name,
|
||||
{
|
||||
"error",
|
||||
msg,
|
||||
})
|
||||
std::cerr << create_error_message({
|
||||
function_name,
|
||||
msg,
|
||||
})
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
void handle_exception(std::string_view function_name) const override {
|
||||
std::cerr << create_error_message(function_name,
|
||||
{
|
||||
"error",
|
||||
"exception",
|
||||
"unknown",
|
||||
})
|
||||
std::cerr << create_error_message({
|
||||
function_name,
|
||||
"exception",
|
||||
"unknown",
|
||||
})
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
void handle_exception(std::string_view function_name,
|
||||
const std::exception &ex) const override {
|
||||
std::cerr << create_error_message(
|
||||
std::cerr << create_error_message({
|
||||
function_name,
|
||||
{
|
||||
"error",
|
||||
"exception",
|
||||
(ex.what() == nullptr ? "unknown" : ex.what()),
|
||||
})
|
||||
"exception",
|
||||
(ex.what() == nullptr ? "unknown" : ex.what()),
|
||||
})
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
void handle_info(std::string_view function_name,
|
||||
std::string_view msg) const override {
|
||||
std::cout << create_error_message(function_name,
|
||||
{
|
||||
"info",
|
||||
msg,
|
||||
})
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
void handle_trace(std::string_view function_name,
|
||||
std::string_view msg) const override {
|
||||
std::cout << create_error_message(function_name,
|
||||
{
|
||||
"trace",
|
||||
msg,
|
||||
})
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
void handle_warn(std::string_view function_name,
|
||||
std::string_view msg) const override {
|
||||
std::cout << create_error_message(function_name,
|
||||
{
|
||||
"warn",
|
||||
msg,
|
||||
})
|
||||
<< std::endl;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
};
|
||||
|
||||
inline const iostream_exception_handler default_exception_handler{};
|
||||
|
||||
extern std::atomic<const i_exception_handler *> exception_handler;
|
||||
|
||||
#if defined(PROJECT_ENABLE_TESTING)
|
||||
[[nodiscard]] inline auto get_exception_handler()
|
||||
-> const i_exception_handler * {
|
||||
[[nodiscard]] inline auto
|
||||
get_exception_handler() -> const i_exception_handler * {
|
||||
return exception_handler;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_TESTING)
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
void handle_debug(std::string_view function_name, std::string_view msg);
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
void handle_error(std::string_view function_name, std::string_view msg);
|
||||
|
||||
void handle_exception(std::string_view function_name);
|
||||
|
||||
void handle_exception(std::string_view function_name, const std::exception &ex);
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
void handle_info(std::string_view function_name, std::string_view msg);
|
||||
|
||||
void handle_trace(std::string_view function_name, std::string_view msg);
|
||||
|
||||
void handle_warn(std::string_view function_name, std::string_view msg);
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
void set_exception_handler(const i_exception_handler *handler);
|
||||
} // namespace repertory::utils::error
|
||||
|
||||
|
@ -38,30 +38,13 @@ auto create_error_message(std::vector<std::string_view> items) -> std::string {
|
||||
return stream.str();
|
||||
}
|
||||
|
||||
auto create_error_message(std::string_view function_name,
|
||||
std::vector<std::string_view> items) -> std::string {
|
||||
items.insert(items.begin(), function_name);
|
||||
return create_error_message(items);
|
||||
}
|
||||
|
||||
auto create_exception(std::string_view function_name,
|
||||
std::vector<std::string_view> items)
|
||||
-> std::runtime_error {
|
||||
return std::runtime_error(create_error_message(function_name, items));
|
||||
items.insert(items.begin(), function_name);
|
||||
return std::runtime_error(create_error_message(items));
|
||||
}
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
void handle_debug(std::string_view function_name, std::string_view msg) {
|
||||
const i_exception_handler *handler{exception_handler};
|
||||
if (handler != nullptr) {
|
||||
handler->handle_debug(function_name, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
default_exception_handler.handle_debug(function_name, msg);
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
void handle_error(std::string_view function_name, std::string_view msg) {
|
||||
const i_exception_handler *handler{exception_handler};
|
||||
if (handler != nullptr) {
|
||||
@ -93,38 +76,6 @@ void handle_exception(std::string_view function_name,
|
||||
default_exception_handler.handle_exception(function_name, ex);
|
||||
}
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
void handle_info(std::string_view function_name, std::string_view msg) {
|
||||
const i_exception_handler *handler{exception_handler};
|
||||
if (handler != nullptr) {
|
||||
handler->handle_info(function_name, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
default_exception_handler.handle_info(function_name, msg);
|
||||
}
|
||||
|
||||
void handle_trace(std::string_view function_name, std::string_view msg) {
|
||||
const i_exception_handler *handler{exception_handler};
|
||||
if (handler != nullptr) {
|
||||
handler->handle_trace(function_name, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
default_exception_handler.handle_trace(function_name, msg);
|
||||
}
|
||||
|
||||
void handle_warn(std::string_view function_name, std::string_view msg) {
|
||||
const i_exception_handler *handler{exception_handler};
|
||||
if (handler != nullptr) {
|
||||
handler->handle_warn(function_name, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
default_exception_handler.handle_warn(function_name, msg);
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
void set_exception_handler(const i_exception_handler *handler) {
|
||||
exception_handler = handler;
|
||||
}
|
||||
|
@ -41,16 +41,8 @@ auto change_to_process_directory() -> bool {
|
||||
|
||||
::GetModuleFileNameA(nullptr, file_name.data(),
|
||||
static_cast<DWORD>(file_name.size() - 1U));
|
||||
auto path = utils::path::get_parent_path(file_name.c_str());
|
||||
auto res = ::SetCurrentDirectoryA(path.c_str()) != 0;
|
||||
if (not res) {
|
||||
throw utils::error::create_exception(
|
||||
function_name, {
|
||||
"failed to set current directory",
|
||||
std::to_string(utils::get_last_error_code()),
|
||||
path,
|
||||
});
|
||||
}
|
||||
auto path = utils::path::strip_to_file_name(file_name.c_str());
|
||||
::SetCurrentDirectoryA(path.c_str());
|
||||
#else // !defined(_WIN32)
|
||||
std::string path;
|
||||
path.resize(PATH_MAX + 1);
|
||||
|
@ -38,12 +38,6 @@ TEST(utils_error, check_default_exception_handler) {
|
||||
|
||||
TEST(utils_error, can_override_exception_handler) {
|
||||
struct my_exc_handler final : public utils::error::i_exception_handler {
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
MOCK_METHOD(void, handle_debug,
|
||||
(std::string_view function_name, std::string_view msg),
|
||||
(const, override));
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
MOCK_METHOD(void, handle_error,
|
||||
(std::string_view function_name, std::string_view msg),
|
||||
(const, override));
|
||||
@ -54,30 +48,11 @@ TEST(utils_error, can_override_exception_handler) {
|
||||
MOCK_METHOD(void, handle_exception,
|
||||
(std::string_view function_name, const std::exception &ex),
|
||||
(const, override));
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
MOCK_METHOD(void, handle_info,
|
||||
(std::string_view function_name, std::string_view msg),
|
||||
(const, override));
|
||||
|
||||
MOCK_METHOD(void, handle_trace,
|
||||
(std::string_view function_name, std::string_view msg),
|
||||
(const, override));
|
||||
|
||||
MOCK_METHOD(void, handle_warn,
|
||||
(std::string_view function_name, std::string_view msg),
|
||||
(const, override));
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
};
|
||||
|
||||
my_exc_handler handler{};
|
||||
utils::error::set_exception_handler(&handler);
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
EXPECT_CALL(handler, handle_debug("test_func", "debug")).WillOnce(Return());
|
||||
utils::error::handle_debug("test_func", "debug");
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
EXPECT_CALL(handler, handle_error("test_func", "error")).WillOnce(Return());
|
||||
utils::error::handle_error("test_func", "error");
|
||||
|
||||
@ -93,17 +68,6 @@ TEST(utils_error, can_override_exception_handler) {
|
||||
});
|
||||
utils::error::handle_exception("test_func_ex", ex);
|
||||
|
||||
#if defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
EXPECT_CALL(handler, handle_info("test_func", "info")).WillOnce(Return());
|
||||
utils::error::handle_info("test_func", "info");
|
||||
|
||||
EXPECT_CALL(handler, handle_trace("test_func", "trace")).WillOnce(Return());
|
||||
utils::error::handle_trace("test_func", "trace");
|
||||
|
||||
EXPECT_CALL(handler, handle_warn("test_func", "warn")).WillOnce(Return());
|
||||
utils::error::handle_warn("test_func", "warn");
|
||||
#endif // defined(PROJECT_ENABLE_V2_ERRORS)
|
||||
|
||||
utils::error::set_exception_handler(&utils::error::default_exception_handler);
|
||||
}
|
||||
} // namespace repertory
|
||||
|
Reference in New Issue
Block a user