#ifndef INSCOPERNBOEXCEPTION_H
#define INSCOPERNBOEXCEPTION_H

#include <NBO/NBOGlobal.h>

#include <exception>
#include <string>

namespace Inscoper::NBO {

/*!
 * \brief The InscoperNBOException class is the custom Exception class of the Inscoper NBO
 */
class NBO_EXPORT InscoperNBOException : public std::exception {
public:
  /*!
     * \brief constructor
     *
     * \param msg : exception message
     */
  explicit InscoperNBOException(const std::string &msg);

  /*!
     * \brief default destructor
     */
  virtual ~InscoperNBOException() noexcept {
  }

  /*!
     * \brief get the message of the exception
     *
     * \return the message
     */
  const char *what() const noexcept override;

private:
  InscoperNBOException &operator=(const InscoperNBOException &);

  std::string _message;
};

/*!
 * \brief The InscoperNBOValidationException class is the custom Exception class of the Inscoper NBO only for validation
 */
class NBO_EXPORT InscoperNBOValidationException : public InscoperNBOException {
public:
    explicit InscoperNBOValidationException(const std::string &msg)
        : InscoperNBOException(msg) {}
    virtual ~InscoperNBOValidationException() noexcept {}
};

} // namespace Inscoper::NBO

#endif // INSCOPERNBOEXCEPTION_H
