rodecomp/scripts/exe/jsoncons/include/jsoncons/conv_error.hpp
ragnarok-clanker e11260a408 Add standalone exe build tooling under scripts/exe
build_exe.py compiles every unit in data/compile.json with the pinned toolchain and links Ragexe.exe.
Not part of the decompilation and not in data/compile.json: imports/*.def (original DLL import tables),
jsoncons/ (v0.170.2 headers + JsonCppLoader glue), nProtect/GameGuard.cpp (no-op GameGuard stand-in).
2026-11-06 15:10:16 +01:00

218 lines
6.8 KiB
C++

/// Copyright 2013-2023 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_CONV_ERROR_HPP
#define JSONCONS_CONV_ERROR_HPP
#include <system_error>
#include <jsoncons/config/jsoncons_config.hpp>
namespace jsoncons {
class conv_error : public std::system_error, public virtual json_exception
{
std::size_t line_number_;
std::size_t column_number_;
mutable std::string what_;
public:
conv_error(std::error_code ec)
: std::system_error(ec), line_number_(0), column_number_(0)
{
}
conv_error(std::error_code ec, const std::string& what_arg)
: std::system_error(ec, what_arg), line_number_(0), column_number_(0)
{
}
conv_error(std::error_code ec, std::size_t position)
: std::system_error(ec), line_number_(0), column_number_(position)
{
}
conv_error(std::error_code ec, std::size_t line, std::size_t column)
: std::system_error(ec), line_number_(line), column_number_(column)
{
}
conv_error(const conv_error& other) = default;
conv_error(conv_error&& other) = default;
const char* what() const noexcept override
{
if (what_.empty())
{
JSONCONS_TRY
{
what_.append(std::system_error::what());
if (line_number_ != 0 && column_number_ != 0)
{
what_.append(" at line ");
what_.append(std::to_string(line_number_));
what_.append(" and column ");
what_.append(std::to_string(column_number_));
}
else if (column_number_ != 0)
{
what_.append(" at position ");
what_.append(std::to_string(column_number_));
}
return what_.c_str();
}
JSONCONS_CATCH(...)
{
return std::system_error::what();
}
}
else
{
return what_.c_str();
}
}
std::size_t line() const noexcept
{
return line_number_;
}
std::size_t column() const noexcept
{
return column_number_;
}
};
enum class conv_errc
{
success = 0,
conversion_failed,
not_utf8,
not_wide_char,
not_vector,
not_array,
not_map,
not_pair,
not_string,
not_string_view,
not_byte_string,
not_byte_string_view,
not_integer,
not_signed_integer,
not_unsigned_integer,
not_bigint,
not_double,
not_bool,
not_variant,
not_nullptr,
not_jsoncons_null_type,
not_bitset,
not_base64,
not_base64url,
not_base16
};
template <class InputIt>
struct decode_result
{
InputIt it;
conv_errc ec;
};
#if !defined(JSONCONS_NO_DEPRECATED)
JSONCONS_DEPRECATED_MSG("Instead, use conv_error") typedef conv_error convert_error;
#endif
} // namespace jsoncons
namespace std {
template<>
struct is_error_code_enum<jsoncons::conv_errc> : public true_type
{
};
}
namespace jsoncons {
namespace detail {
class conv_error_category_impl
: public std::error_category
{
public:
const char* name() const noexcept override
{
return "jsoncons/convert";
}
std::string message(int ev) const override
{
switch (static_cast<conv_errc>(ev))
{
case conv_errc::conversion_failed:
return "Unable to convert into the provided type";
case conv_errc::not_utf8:
return "Cannot convert string to UTF-8";
case conv_errc::not_wide_char:
return "Cannot convert string to wide characters";
case conv_errc::not_vector:
return "Cannot convert to vector";
case conv_errc::not_array:
return "Cannot convert to std::array";
case conv_errc::not_map:
return "Cannot convert to map";
case conv_errc::not_pair:
return "Cannot convert to std::pair";
case conv_errc::not_string:
return "Cannot convert to string";
case conv_errc::not_string_view:
return "Cannot convert to string_view";
case conv_errc::not_byte_string:
return "Cannot convert to byte_string";
case conv_errc::not_byte_string_view:
return "Cannot convert to byte_string_view";
case conv_errc::not_integer:
return "Cannot convert to integer";
case conv_errc::not_signed_integer:
return "Cannot convert to signed integer";
case conv_errc::not_unsigned_integer:
return "Cannot convert to unsigned integer";
case conv_errc::not_bigint:
return "Cannot convert to bigint";
case conv_errc::not_double:
return "Cannot convert to double";
case conv_errc::not_bool:
return "Cannot convert to bool";
case conv_errc::not_variant:
return "Cannot convert to std::variant";
case conv_errc::not_nullptr:
return "Cannot convert to std::nullptr_t";
case conv_errc::not_jsoncons_null_type:
return "Cannot convert to jsoncons::null_type";
case conv_errc::not_bitset:
return "Cannot convert to std::bitset";
case conv_errc::not_base64:
return "Input is not a base64 encoded string";
case conv_errc::not_base64url:
return "Input is not a base64url encoded string";
case conv_errc::not_base16:
return "Input is not a base16 encoded string";
default:
return "Unknown conversion error";
}
}
};
} // detail
extern inline
const std::error_category& conv_error_category()
{
static detail::conv_error_category_impl instance;
return instance;
}
inline
std::error_code make_error_code(conv_errc result)
{
return std::error_code(static_cast<int>(result),conv_error_category());
}
}
#endif