mirror of
https://github.com/nlohmann/json.git
synced 2026-10-04 13:40:33 +00:00
Throwing type_error.316 from to_cbor(), to_ubjson(), to_bjdata(), and to_bson() by default would break code that works with 3.12.0, for example code that stores ISO 8859-1 in a string and only writes it to a binary format. Following the plan for 4.0.0, the check is now opt-in via the new macro JSON_STRICT_BINARY_UTF8 (default 0), which is planned to become the default in 4.0.0: - abi_macros.hpp: default 0 and ABI tag _sbu8; macro_unscope.hpp undefines it; CMake option JSON_StrictBinaryUTF8; ABI namespace tests updated. - binary_writer: the four writers call check_text_utf8(), which checks only if the macro is enabled. BON8 always checks, MessagePack never. - Tests: the strict checks move to unit-binary_utf8_strict.cpp, which defines the macro; the per-format tests now check that the default writes the bytes unchanged (from_X(to_X(j)) == j). - Docs: new macro page, macro lists, CMake option, namespace tags, and the writer/format pages describe the default and the opt-in. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
156 lines
5.3 KiB
C++
156 lines
5.3 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
|
|
|
|
// This file contains all macro definitions affecting or depending on the ABI
|
|
|
|
#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
|
|
#if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
|
|
#if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0
|
|
#warning "Already included a different version of the library!"
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum)
|
|
#define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum)
|
|
#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum)
|
|
|
|
#ifndef JSON_DIAGNOSTICS
|
|
#define JSON_DIAGNOSTICS 0
|
|
#endif
|
|
|
|
#ifndef JSON_DIAGNOSTIC_POSITIONS
|
|
#define JSON_DIAGNOSTIC_POSITIONS 0
|
|
#endif
|
|
|
|
#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
|
|
#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
|
|
#endif
|
|
|
|
#ifndef JSON_BRACE_INIT_COPY_SEMANTICS
|
|
#define JSON_BRACE_INIT_COPY_SEMANTICS 0
|
|
#endif
|
|
|
|
#ifndef JSON_PRECISE_STREAM_POSITION
|
|
#define JSON_PRECISE_STREAM_POSITION 0
|
|
#endif
|
|
|
|
#ifndef JSON_STRICT_NUL_HANDLING
|
|
#define JSON_STRICT_NUL_HANDLING 0
|
|
#endif
|
|
|
|
#ifndef JSON_STRICT_BINARY_UTF8
|
|
#define JSON_STRICT_BINARY_UTF8 0
|
|
#endif
|
|
|
|
#if JSON_DIAGNOSTICS
|
|
#define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag
|
|
#else
|
|
#define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS
|
|
#endif
|
|
|
|
#if JSON_DIAGNOSTIC_POSITIONS
|
|
#define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp
|
|
#else
|
|
#define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS
|
|
#endif
|
|
|
|
#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
|
|
#define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp
|
|
#else
|
|
#define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON
|
|
#endif
|
|
|
|
#if JSON_BRACE_INIT_COPY_SEMANTICS
|
|
#define NLOHMANN_JSON_ABI_TAG_BRACE_INIT_COPY_SEMANTICS _bics
|
|
#else
|
|
#define NLOHMANN_JSON_ABI_TAG_BRACE_INIT_COPY_SEMANTICS
|
|
#endif
|
|
|
|
#if JSON_PRECISE_STREAM_POSITION
|
|
#define NLOHMANN_JSON_ABI_TAG_PRECISE_STREAM_POSITION _psp
|
|
#else
|
|
#define NLOHMANN_JSON_ABI_TAG_PRECISE_STREAM_POSITION
|
|
#endif
|
|
|
|
#if JSON_STRICT_NUL_HANDLING
|
|
#define NLOHMANN_JSON_ABI_TAG_STRICT_NUL_HANDLING _snul
|
|
#else
|
|
#define NLOHMANN_JSON_ABI_TAG_STRICT_NUL_HANDLING
|
|
#endif
|
|
|
|
#if JSON_STRICT_BINARY_UTF8
|
|
#define NLOHMANN_JSON_ABI_TAG_STRICT_BINARY_UTF8 _sbu8
|
|
#else
|
|
#define NLOHMANN_JSON_ABI_TAG_STRICT_BINARY_UTF8
|
|
#endif
|
|
|
|
#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION
|
|
#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
|
|
#endif
|
|
|
|
// Construct the namespace ABI tags component
|
|
#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c, d, e, f, g) json_abi ## a ## b ## c ## d ## e ## f ## g
|
|
#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c, d, e, f, g) \
|
|
NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c, d, e, f, g)
|
|
|
|
#define NLOHMANN_JSON_ABI_TAGS \
|
|
NLOHMANN_JSON_ABI_TAGS_CONCAT( \
|
|
NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \
|
|
NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \
|
|
NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS, \
|
|
NLOHMANN_JSON_ABI_TAG_BRACE_INIT_COPY_SEMANTICS, \
|
|
NLOHMANN_JSON_ABI_TAG_PRECISE_STREAM_POSITION, \
|
|
NLOHMANN_JSON_ABI_TAG_STRICT_NUL_HANDLING, \
|
|
NLOHMANN_JSON_ABI_TAG_STRICT_BINARY_UTF8)
|
|
|
|
// Construct the namespace version component
|
|
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
|
|
_v ## major ## _ ## minor ## _ ## patch
|
|
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
|
|
NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
|
|
|
|
#if NLOHMANN_JSON_NAMESPACE_NO_VERSION
|
|
#define NLOHMANN_JSON_NAMESPACE_VERSION
|
|
#else
|
|
#define NLOHMANN_JSON_NAMESPACE_VERSION \
|
|
NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
|
|
NLOHMANN_JSON_VERSION_MINOR, \
|
|
NLOHMANN_JSON_VERSION_PATCH)
|
|
#endif
|
|
|
|
// Combine namespace components
|
|
#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b
|
|
#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
|
|
NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
|
|
|
|
#ifndef NLOHMANN_JSON_NAMESPACE
|
|
#define NLOHMANN_JSON_NAMESPACE \
|
|
nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
|
|
NLOHMANN_JSON_ABI_TAGS, \
|
|
NLOHMANN_JSON_NAMESPACE_VERSION)
|
|
#endif
|
|
|
|
#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
#define NLOHMANN_JSON_NAMESPACE_BEGIN \
|
|
namespace nlohmann \
|
|
{ \
|
|
inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
|
|
NLOHMANN_JSON_ABI_TAGS, \
|
|
NLOHMANN_JSON_NAMESPACE_VERSION) \
|
|
{
|
|
#endif
|
|
|
|
#ifndef NLOHMANN_JSON_NAMESPACE_END
|
|
#define NLOHMANN_JSON_NAMESPACE_END \
|
|
} /* namespace (inline namespace) NOLINT(readability/namespace) */ \
|
|
} // namespace nlohmann
|
|
#endif
|