mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-18 10:28:09 +08:00
feat: add error_kind to distinguish error_info
This commit is contained in:
@@ -7,17 +7,41 @@
|
|||||||
namespace toml
|
namespace toml
|
||||||
{
|
{
|
||||||
|
|
||||||
|
enum class error_kind : std::uint8_t
|
||||||
|
{
|
||||||
|
runtime_error,
|
||||||
|
out_of_range,
|
||||||
|
type_error,
|
||||||
|
syntax_error,
|
||||||
|
file_io_error
|
||||||
|
};
|
||||||
|
|
||||||
// error info returned from parser.
|
// error info returned from parser.
|
||||||
struct error_info
|
struct error_info
|
||||||
{
|
{
|
||||||
error_info(std::string t, source_location l, std::string m, std::string s = "")
|
error_info(std::string t, source_location l, std::string m, std::string s = "")
|
||||||
: title_(std::move(t)), locations_{std::make_pair(std::move(l), std::move(m))},
|
: kind_(error_kind::runtime_error), title_(std::move(t)),
|
||||||
|
locations_{std::make_pair(std::move(l), std::move(m))},
|
||||||
suffix_(std::move(s))
|
suffix_(std::move(s))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
error_info(std::string t, std::vector<std::pair<source_location, std::string>> l,
|
error_info(std::string t, std::vector<std::pair<source_location, std::string>> l,
|
||||||
std::string s = "")
|
std::string s = "")
|
||||||
: title_(std::move(t)), locations_(std::move(l)), suffix_(std::move(s))
|
: kind_(error_kind::runtime_error), title_(std::move(t)),
|
||||||
|
locations_(std::move(l)), suffix_(std::move(s))
|
||||||
|
{}
|
||||||
|
|
||||||
|
error_info(error_kind k, std::string t, source_location l, std::string m, std::string s = "")
|
||||||
|
: kind_(k), title_(std::move(t)),
|
||||||
|
locations_{std::make_pair(std::move(l), std::move(m))},
|
||||||
|
suffix_(std::move(s))
|
||||||
|
{}
|
||||||
|
|
||||||
|
error_info(error_kind k, std::string t,
|
||||||
|
std::vector<std::pair<source_location, std::string>> l,
|
||||||
|
std::string s = "")
|
||||||
|
: kind_(k), title_(std::move(t)),
|
||||||
|
locations_(std::move(l)), suffix_(std::move(s))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
std::string const& title() const noexcept {return title_;}
|
std::string const& title() const noexcept {return title_;}
|
||||||
@@ -36,6 +60,7 @@ struct error_info
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
error_kind kind_;
|
||||||
std::string title_;
|
std::string title_;
|
||||||
std::vector<std::pair<source_location, std::string>> locations_;
|
std::vector<std::pair<source_location, std::string>> locations_;
|
||||||
std::string suffix_; // hint or something like that
|
std::string suffix_; // hint or something like that
|
||||||
@@ -78,6 +103,13 @@ error_info make_error_info(
|
|||||||
error_info ei(std::move(title), std::move(loc), std::move(msg));
|
error_info ei(std::move(title), std::move(loc), std::move(msg));
|
||||||
return detail::make_error_info_rec(ei, std::forward<Ts>(tail) ... );
|
return detail::make_error_info_rec(ei, std::forward<Ts>(tail) ... );
|
||||||
}
|
}
|
||||||
|
template<typename ... Ts>
|
||||||
|
error_info make_error_info(error_kind k,
|
||||||
|
std::string title, source_location loc, std::string msg, Ts&& ... tail)
|
||||||
|
{
|
||||||
|
error_info ei(k, std::move(title), std::move(loc), std::move(msg));
|
||||||
|
return detail::make_error_info_rec(ei, std::forward<Ts>(tail) ... );
|
||||||
|
}
|
||||||
|
|
||||||
std::string format_error(const std::string& errkind, const error_info& err);
|
std::string format_error(const std::string& errkind, const error_info& err);
|
||||||
std::string format_error(const error_info& err);
|
std::string format_error(const error_info& err);
|
||||||
|
@@ -2120,6 +2120,13 @@ error_info make_error_info(
|
|||||||
v.location(), std::move(msg), std::forward<Ts>(tail)...);
|
v.location(), std::move(msg), std::forward<Ts>(tail)...);
|
||||||
}
|
}
|
||||||
template<typename TC, typename ... Ts>
|
template<typename TC, typename ... Ts>
|
||||||
|
error_info make_error_info(error_kind k,
|
||||||
|
std::string title, const basic_value<TC>& v, std::string msg, Ts&& ... tail)
|
||||||
|
{
|
||||||
|
return make_error_info(k, std::move(title),
|
||||||
|
v.location(), std::move(msg), std::forward<Ts>(tail)...);
|
||||||
|
}
|
||||||
|
template<typename TC, typename ... Ts>
|
||||||
std::string format_error(std::string title,
|
std::string format_error(std::string title,
|
||||||
const basic_value<TC>& v, std::string msg, Ts&& ... tail)
|
const basic_value<TC>& v, std::string msg, Ts&& ... tail)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user