ErrorHandler.hpp 12.27 KiB
#ifndef PROJECT_ERRORHANDLER_HPP
#define PROJECT_ERRORHANDLER_HPP
#include <type_traits>
#include <stdint.h> // for the uint_8t stepID
// Forward declaration of the class, since its header file depends on the ErrorHandler
class Message;
/**
* A class that handles unexpected software errors, including internal errors or errors due to
* invalid & incorrect input data.
*
* @todo Add auxiliary data field to errors
*/
class ErrorHandler {
private:
/**
* Log the error to a logging facility. Platform-dependent.
*/
template <typename ErrorType>
static void logError(const Message& message, ErrorType errorType);
/**
* Log an error without a Message to a logging facility. Platform-dependent.
*/
template <typename ErrorType>
static void logError(ErrorType errorType);
public:
enum InternalErrorType {
UnknownInternalError = 0,
/**
* While writing (creating) a message, an amount of bytes was tried to be added but
* resulted in failure, since the message storage was not enough.
*/
MessageTooLarge = 1,
/**
* Asked to append a number of bits larger than supported
*/
TooManyBitsAppend = 2,
/**
* Asked to append a byte, while the previous byte was not complete
*/
ByteBetweenBits = 3,
/**
* A string is larger than the largest allowed string
*/
StringTooLarge = 4,
/**
* An error in the header of a packet makes it unable to be parsed
*/
UnacceptablePacket = 5,
/**
* A date that isn't valid according to the Gregorian calendar or cannot be parsed by the
* TimeHelper
*/
InvalidDate = 6,
/**
* Asked a Message type that doesn't exist
*/
UnknownMessageType = 7,
/**
* Asked to append unnecessary spare bits
*/
InvalidSpareBits = 8,
/**
* A function received a Message that was not of the correct type
*/