From a150df50e31d8cb6145a4ffe7cc7e3a3c623ca54 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 5 May 2024 03:59:08 +0500 Subject: feat: exception class for commands --- src/commands/response_error.hpp | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/commands/response_error.hpp (limited to 'src/commands/response_error.hpp') diff --git a/src/commands/response_error.hpp b/src/commands/response_error.hpp new file mode 100644 index 0000000..deb142e --- /dev/null +++ b/src/commands/response_error.hpp @@ -0,0 +1,93 @@ +#pragma once + +#include +#include +#include + +#include "command.hpp" + +namespace bot::command { + enum ResponseErrorType { + NOT_ENOUGH_ARGUMENTS, + INCORRECT_ARGUMENT, + + INCOMPATIBLE_NAME, + NAMESAKE_CREATION, + NOT_FOUND, + + SOMETHING_WENT_WRONG, + + EXTERNAL_API_ERROR, + INSUFFICIENT_RIGHTS + }; + + template + class ResponseError; + + template + class ResponseError::type> { + public: + ResponseError(const std::string &message) : message(message), m_type(T){}; + ~ResponseError() = default; + + const std::string &what() const noexcept { return this->message; } + + const ResponseErrorType &type() const noexcept { return this->m_type; } + + private: + std::string message; + ResponseErrorType m_type; + }; + + template + class ResponseError> { + public: + ResponseError() : m_type(T){}; + ~ResponseError() = default; + + const ResponseErrorType &type() const noexcept { return this->m_type; } + + private: + ResponseErrorType m_type; + }; + + template + class ResponseError> { + public: + ResponseError(const int &code, const std::optional &message) + : m_code(code), message(message), m_type(T){}; + ~ResponseError() = default; + + const std::optional &what() const noexcept { + return this->message; + } + const int &code() const noexcept { return this->code; } + const ResponseErrorType &type() const noexcept { return this->m_type; } + + private: + int m_code; + std::optional message; + ResponseErrorType m_type; + }; + + template + class ResponseError> { + public: + ResponseError(const CommandArgument &argument) + : m_argument(argument), m_type(T){}; + ~ResponseError() = default; + + const CommandArgument &argument() const noexcept { + return this->m_argument; + } + const ResponseErrorType &type() const noexcept { return this->m_type; } + + private: + CommandArgument m_argument; + ResponseErrorType m_type; + }; +} -- cgit v1.2.3