blob: 347e704f2a7eb639bcf3bc6eec4f3a553c2c0205 [file] [log] [blame] [edit]
#pragma once
#include "types.hpp"
#include <stdexcept>
namespace vpd
{
/** @class Exception
* @brief This class inherits std::runtime_error and overrrides "what" method
* to return the description of exception.
* This class also works as base class for custom exception classes for
* VPD repository.
*/
class Exception : public std::runtime_error
{
public:
// deleted methods
Exception() = delete;
Exception(const Exception&) = delete;
Exception(Exception&&) = delete;
Exception& operator=(const Exception&) = delete;
// default destructor
~Exception() = default;
/** @brief constructor
*
* @param[in] msg - Information w.r.t exception.
*/
explicit Exception(const std::string& msg) :
std::runtime_error(msg), m_errMsg(msg)
{}
/** @brief inline method to return exception string.
*
* This is overridden method of std::runtime class.
*/
inline const char* what() const noexcept override
{
return m_errMsg.c_str();
}
// TODO: Create getErrorType api by defining VPD default error type
private:
/** @brief string to hold the reason of exception */
std::string m_errMsg;
}; // class Exception
/** @class EccException
*
* @brief This class extends Exceptions class and define type for ECC related
* exception in VPD.
*/
class EccException : public Exception
{
public:
// deleted methods
EccException() = delete;
EccException(const EccException&) = delete;
EccException(EccException&&) = delete;
EccException& operator=(const EccException&) = delete;
// default destructor
~EccException() = default;
/** @brief constructor
*
* @param[in] msg - Information w.r.t exception.
*/
explicit EccException(const std::string& msg) : Exception(msg) {}
/** @brief Method to get error type
*
* @return Error type which has to be logged for errors of type
* EccException.
*/
types::ErrorType getErrorType() const
{
return types::ErrorType::EccCheckFailed;
}
}; // class EccException
/** @class DataException
*
* @brief This class extends Exceptions class and define type for data related
* exception in VPD
*/
class DataException : public Exception
{
public:
// deleted methods
DataException() = delete;
DataException(const DataException&) = delete;
DataException(DataException&&) = delete;
DataException& operator=(const DataException&) = delete;
// default destructor
~DataException() = default;
/** @brief constructor
*
* @param[in] msg - string to define exception
*/
explicit DataException(const std::string& msg) : Exception(msg) {}
/** @brief Method to get error type
*
* @return Error type which has to be logged for errors of type
* DataException.
*/
types::ErrorType getErrorType() const
{
return types::ErrorType::InvalidVpdMessage;
}
}; // class DataException
class JsonException : public Exception
{
public:
// deleted methods
JsonException() = delete;
JsonException(const JsonException&) = delete;
JsonException(JsonException&&) = delete;
JsonException& operator=(const JsonException&) = delete;
// default destructor
~JsonException() = default;
/** @brief constructor
* @param[in] msg - Information w.r.t. exception.
* @param[in] path - Json path
*/
JsonException(const std::string& msg, const std::string& path) :
Exception(msg), m_jsonPath(path)
{}
/** @brief constructor
* @param[in] msg - Information w.r.t. exception.
*/
JsonException(const std::string& msg) : Exception(msg) {}
/** @brief Json path getter method.
*
* @return - Json path
*/
inline std::string getJsonPath() const
{
return m_jsonPath;
}
/** @brief Method to get error type
*
* @return Error type which has to be logged for errors of type
* JsonException.
*/
types::ErrorType getErrorType() const
{
return types::ErrorType::JsonFailure;
}
private:
/** To hold the path of Json that failed*/
std::string m_jsonPath;
}; // class JSonException
/** @class GpioException
* @brief Custom handler for GPIO exception.
*
* This class extends Exceptions class and define
* type for GPIO related exception in VPD.
*/
class GpioException : public Exception
{
public:
// deleted methods
GpioException() = delete;
GpioException(const GpioException&) = delete;
GpioException(GpioException&&) = delete;
GpioException& operator=(const GpioException&) = delete;
// default destructor
~GpioException() = default;
/** @brief constructor
* @param[in] msg - string to define exception
*/
explicit GpioException(const std::string& msg) : Exception(msg) {}
/** @brief Method to get error type
*
* @return Error type which has to be logged for errors of type
* GpioException.
*/
types::ErrorType getErrorType() const
{
return types::ErrorType::GpioError;
}
};
/** @class DbusException
* @brief Custom handler for Dbus exception.
*
* This class extends Exceptions class and define
* type for DBus related exception in VPD.
*/
class DbusException : public Exception
{
public:
// deleted methods
DbusException() = delete;
DbusException(const DbusException&) = delete;
DbusException(DbusException&&) = delete;
DbusException& operator=(const DbusException&) = delete;
// default destructor
~DbusException() = default;
/** @brief constructor
* @param[in] msg - string to define exception
*/
explicit DbusException(const std::string& msg) : Exception(msg) {}
/** @brief Method to get error type
*
* @return Error type which has to be logged for errors of type
* DbusException.
*/
types::ErrorType getErrorType() const
{
return types::ErrorType::DbusFailure;
}
};
/** @class FirmwareException
* @brief Custom handler for firmware exception.
*
* This class extends Exceptions class and define
* type for generic firmware related exception in VPD.
*/
class FirmwareException : public Exception
{
public:
// deleted methods
FirmwareException() = delete;
FirmwareException(const FirmwareException&) = delete;
FirmwareException(FirmwareException&&) = delete;
FirmwareException& operator=(const FirmwareException&) = delete;
// default destructor
~FirmwareException() = default;
/** @brief constructor
* @param[in] msg - string to define exception
*/
explicit FirmwareException(const std::string& msg) : Exception(msg) {}
/** @brief Method to get error type
*
* @return Error type which has to be logged for errors of type
* FirmwareException.
*/
types::ErrorType getErrorType() const
{
return types::ErrorType::InternalFailure;
}
};
/** @class EepromException
* @brief Custom handler for EEPROM exception.
*
* This class extends Exceptions class and define
* type for EEPROM related exception in VPD.
*/
class EepromException : public Exception
{
public:
// deleted methods
EepromException() = delete;
EepromException(const EepromException&) = delete;
EepromException(EepromException&&) = delete;
EepromException& operator=(const EepromException&) = delete;
// default destructor
~EepromException() = default;
/** @brief constructor
* @param[in] msg - string to define exception
*/
explicit EepromException(const std::string& msg) : Exception(msg) {}
/** @brief Method to get error type
*
* @return Error type which has to be logged for errors of type
* EepromException.
*/
types::ErrorType getErrorType() const
{
return types::ErrorType::InvalidEeprom;
}
};
} // namespace vpd