toml11/toml/exception.hpp

84 lines
2.1 KiB
C++
Raw Normal View History

2018-12-13 11:44:10 +00:00
// Copyright Toru Niina 2017.
// Distributed under the MIT License.
#ifndef TOML11_EXCEPTION_HPP
#define TOML11_EXCEPTION_HPP
2023-10-10 16:43:43 +00:00
#include <array>
2017-04-21 04:14:53 +00:00
#include <string>
2023-10-10 16:43:43 +00:00
#include <stdexcept>
#include <cstring>
2017-04-21 04:14:53 +00:00
#include "source_location.hpp"
2017-04-21 04:14:53 +00:00
namespace toml
{
struct file_io_error : public std::runtime_error
{
public:
file_io_error(int errnum, const std::string& msg, const std::string& fname)
: std::runtime_error(msg + " \"" + fname + "\": errno = " + std::to_string(errnum)),
errno_(errnum)
{}
int get_errno() const noexcept {return errno_;}
private:
int errno_;
};
2017-04-21 04:14:53 +00:00
struct exception : public std::exception
{
public:
explicit exception(const source_location& loc): loc_(loc) {}
2017-06-12 13:04:59 +00:00
virtual ~exception() noexcept override = default;
2017-04-21 04:14:53 +00:00
virtual const char* what() const noexcept override {return "";}
virtual source_location const& location() const noexcept {return loc_;}
protected:
source_location loc_;
2017-04-21 04:14:53 +00:00
};
struct syntax_error : public toml::exception
{
public:
explicit syntax_error(const std::string& what_arg, const source_location& loc)
: exception(loc), what_(what_arg)
{}
2017-06-12 13:04:59 +00:00
virtual ~syntax_error() noexcept override = default;
2017-04-21 04:14:53 +00:00
virtual const char* what() const noexcept override {return what_.c_str();}
protected:
std::string what_;
};
struct type_error : public toml::exception
{
public:
explicit type_error(const std::string& what_arg, const source_location& loc)
: exception(loc), what_(what_arg)
{}
2017-06-12 13:04:59 +00:00
virtual ~type_error() noexcept override = default;
2017-04-21 04:14:53 +00:00
virtual const char* what() const noexcept override {return what_.c_str();}
protected:
std::string what_;
};
struct internal_error : public toml::exception
{
public:
explicit internal_error(const std::string& what_arg, const source_location& loc)
: exception(loc), what_(what_arg)
{}
2017-06-12 13:04:59 +00:00
virtual ~internal_error() noexcept override = default;
2017-04-21 04:14:53 +00:00
virtual const char* what() const noexcept override {return what_.c_str();}
2017-04-21 04:14:53 +00:00
protected:
std::string what_;
};
} // toml
#endif // TOML_EXCEPTION