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