mirror of
https://github.com/nlohmann/json.git
synced 2026-10-03 13:10:33 +00:00
Merges claude/binary-utf8-roundtrip-5651, where the writers now only check UTF-8 if JSON_STRICT_BINARY_UTF8 is enabled, and applies the same rule to the error_handler parameter added here: to_cbor(), to_ubjson(), to_bjdata(), and to_bson() default to error_handler_t::keep, the behavior of 3.12.0, or to error_handler_t::strict if JSON_STRICT_BINARY_UTF8 is enabled (detail::binary_writer_default_error_handler()). Passing a handler explicitly always takes precedence. - Conflicts in binary_writer.hpp resolved in favor of this branch's error_handler, which replaces #5741's check_text_utf8(). - Tests: the "default parameters" section checks that the default equals keep; unit-binary_utf8_strict.cpp checks that an explicit handler overrides the macro's default. - Docs: signatures show keep; parameter, exception, and format pages describe keep as the default and the macro; the two 3.13.0 version history entries of each writer are merged into one. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
51 lines
1.8 KiB
C++
51 lines
1.8 KiB
C++
// __ _____ _____ _____
|
|
// __| | __| | | | JSON for Modern C++
|
|
// | | |__ | | | | | | version 3.12.0
|
|
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
//
|
|
// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
#include <nlohmann/detail/abi_macros.hpp>
|
|
|
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
namespace detail
|
|
{
|
|
|
|
/// how to treat decoding errors
|
|
///
|
|
/// @ref basic_json::dump uses this to decide what to do with ill-formed
|
|
/// UTF-8 while escaping a string, and the binary writers (@ref
|
|
/// basic_json::to_cbor, @ref basic_json::to_ubjson, @ref
|
|
/// basic_json::to_bjdata, @ref basic_json::to_bson) use it the same way for
|
|
/// string values and object keys. The binary readers (@ref
|
|
/// basic_json::from_cbor, @ref basic_json::from_msgpack, @ref
|
|
/// basic_json::from_ubjson, @ref basic_json::from_bjdata, @ref
|
|
/// basic_json::from_bson) use it to decide whether to check text strings
|
|
/// and object keys for well-formed UTF-8 at all, since none of those
|
|
/// formats requires a decoder to do so.
|
|
enum class error_handler_t
|
|
{
|
|
strict, ///< throw a type_error/parse_error exception in case of invalid UTF-8
|
|
replace, ///< replace invalid UTF-8 sequences with U+FFFD
|
|
ignore, ///< ignore invalid UTF-8 sequences
|
|
keep ///< keep invalid UTF-8 sequences unchanged
|
|
};
|
|
|
|
/// the default error handler of the CBOR, UBJSON, BJData, and BSON writers:
|
|
/// error_handler_t::strict if JSON_STRICT_BINARY_UTF8 is enabled, otherwise
|
|
/// error_handler_t::keep (the behavior before version 3.13.0)
|
|
constexpr error_handler_t binary_writer_default_error_handler() noexcept
|
|
{
|
|
#if JSON_STRICT_BINARY_UTF8
|
|
return error_handler_t::strict;
|
|
#else
|
|
return error_handler_t::keep;
|
|
#endif
|
|
}
|
|
|
|
} // namespace detail
|
|
NLOHMANN_JSON_NAMESPACE_END
|