// Squawk messenger. // Copyright (C) 2019 Yury Gubich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include "exceptions.h" DataBase::Exception::Exception(): std::exception() {} DataBase::Exception::~Exception() {} const char* DataBase::Exception::what() const noexcept( true ) { std::string* msg = new std::string(getMessage()); return msg->c_str(); } DataBase::Directory::Directory(const std::string& p_path): Exception(), path(p_path) {} std::string DataBase::Directory::getMessage() const { return "Can't create directory for database at " + path;} DataBase::Closed::Closed( const std::string& p_operation, const std::string& p_dbName, const std::optional& p_tableName ): Exception(), operation(p_operation), dbName(p_dbName), tableName(p_tableName) {} std::string DataBase::Closed::getMessage() const { std::string msg = "An attempt to perform operation " + operation + " on closed database " + dbName; if (tableName.has_value()) { msg += + " on table " + tableName.value(); } return msg; } DataBase::Opened::Opened(const std::string& p_dbName, const std::string& p_action): Exception(), dbName(p_dbName), action(p_action) {} std::string DataBase::Opened::getMessage() const { return "An attempt to " + action + " (the database " + dbName + ") but it's can't be done because the DataBase is already opened"; } DataBase::NotFound::NotFound( const std::string& p_key, const std::string& p_dbName, const std::string& p_tableName ): Exception(), key(p_key), dbName(p_dbName), tableName(p_tableName) {} std::string DataBase::NotFound::getMessage() const { return "Element for id " + key + " wasn't found " + " in database " + dbName + " in table " + tableName;} DataBase::Exist::Exist( const std::string& p_key, const std::string& p_dbName, const std::string& p_tableName ): Exception(), key(p_key), dbName(p_dbName), tableName(p_tableName) {} std::string DataBase::Exist::getMessage() const { return "An attempt to insert element with key " + key + " to database " + dbName + " to table " + tableName + " but it already has an element with given id"; } DataBase::Unknown::Unknown( const std::string& p_dbName, const std::string& message, const std::optional& p_tableName ): Exception(), dbName(p_dbName), tableName(p_tableName), msg(message) {} std::string DataBase::Unknown::getMessage() const { std::string result = "Unknown error in database " + dbName; if (tableName.has_value()) { result += " in table " + tableName.value(); } result += ": " + msg; return result; }