diff options
Diffstat (limited to 'include/jsoncons_ext/csv/csv_error.hpp')
-rw-r--r-- | include/jsoncons_ext/csv/csv_error.hpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/include/jsoncons_ext/csv/csv_error.hpp b/include/jsoncons_ext/csv/csv_error.hpp new file mode 100644 index 0000000..30255dd --- /dev/null +++ b/include/jsoncons_ext/csv/csv_error.hpp @@ -0,0 +1,85 @@ +/// Copyright 2013 Daniel Parker +// Distributed under the Boost license, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See https://github.com/danielaparker/jsoncons for latest version + +#ifndef JSONCONS_CSV_CSV_ERROR_HPP +#define JSONCONS_CSV_CSV_ERROR_HPP + +#include <system_error> +#include <jsoncons/json_exception.hpp> + +namespace jsoncons { namespace csv { + + enum class csv_errc : int + { + success = 0, + unexpected_eof = 1, + source_error, + expected_quote, + syntax_error, + invalid_parse_state, + invalid_escaped_char, + unexpected_char_between_fields + }; + +#if !defined(JSONCONS_NO_DEPRECATED) +JSONCONS_DEPRECATED_MSG("Instead, use csv_errc") typedef csv_errc csv_parser_errc; +#endif + +class csv_error_category_impl + : public std::error_category +{ +public: + const char* name() const noexcept override + { + return "jsoncons/csv"; + } + std::string message(int ev) const override + { + switch (static_cast<csv_errc>(ev)) + { + case csv_errc::unexpected_eof: + return "Unexpected end of file"; + case csv_errc::source_error: + return "Source error"; + case csv_errc::expected_quote: + return "Expected quote character"; + case csv_errc::syntax_error: + return "CSV syntax error"; + case csv_errc::invalid_parse_state: + return "Invalid CSV parser state"; + case csv_errc::invalid_escaped_char: + return "Invalid character following quote escape character"; + case csv_errc::unexpected_char_between_fields: + return "Unexpected character between fields"; + default: + return "Unknown CSV parser error"; + } + } +}; + +inline +const std::error_category& csv_error_category() +{ + static csv_error_category_impl instance; + return instance; +} + +inline +std::error_code make_error_code(csv_errc result) +{ + return std::error_code(static_cast<int>(result),csv_error_category()); +} + +}} + +namespace std { + template<> + struct is_error_code_enum<jsoncons::csv::csv_errc> : public true_type + { + }; +} + +#endif |