mirror of
https://github.com/nlohmann/json.git
synced 2026-10-12 17:13:13 +07:00
* Restore v3.12.0 support for custom object key types Custom object_t types whose key_type is not string_t compiled with v3.12.0 for several APIs that unreleased changes broke: - to_bson failed for every custom key type (#5553 kept a const string_t* to the key); the nested entry's header is now written where the entry is found. - Copying deep values (and parse, merge_patch, update, insert) required operator== on keys (#5389); keys without one are now paired via find(). - to_cbor/to_msgpack required an implicit conversion to string_t (#5746, #5328); keys without one go through a temporary basic_json again. - at() required a conversion to string_t for its error message (#5727); other keys are passed to concat() unchanged again. The new unit-custom-object-key-type.cpp covers five key types with different capabilities. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Use the with_object_t alias for the custom object key test types Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Avoid floating-point equality in custom key type test GCC with -Werror=float-equal rejects comparing the double value with ==. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Write the head of nested BSON elements in one helper Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Suppress bugprone-return-const-ref-from-parameter in key_for_message The reference is only passed to concat() within the full-expression that holds the key, like the similar helpers in binary_writer.hpp. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Make the value of the custom test key types private clang-tidy (cppcoreguidelines-non-private-member-variables-in-classes) rejects the protected member; the derived key types use a protected accessor instead. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Pass keys with data() and size() unchanged into the at() miss message key_for_message() converted every key that string_t can be constructed from, so a miss on a string_t or string_view key copied it before concat() copied it again. Keys that concat() can append through data() and size() are now passed through; only other keys (string literals, key types that just convert to string_t) are converted. Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me>
52 lines
1.3 KiB
C++
52 lines
1.3 KiB
C++
// __ _____ _____ _____
|
|
// __| | __| | | | JSON for Modern C++ (supporting code)
|
|
// | | |__ | | | | | | version 3.12.0
|
|
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
//
|
|
// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#include "doctest_compatibility.h"
|
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
#include "custom_key_test.hpp"
|
|
|
|
// object type whose key type has implicit conversion to std::string and operator== (see custom_key_test.hpp)
|
|
using custom_key_test::json_full;
|
|
|
|
TEST_CASE("custom object key types: copy (json_full)")
|
|
{
|
|
custom_key_test::test_copy<json_full>();
|
|
}
|
|
|
|
TEST_CASE("custom object key types: parse (json_full)")
|
|
{
|
|
custom_key_test::test_parse<json_full>();
|
|
}
|
|
|
|
TEST_CASE("custom object key types: merge_patch, update, and insert (json_full)")
|
|
{
|
|
custom_key_test::test_patch<json_full>();
|
|
}
|
|
|
|
TEST_CASE("custom object key types: at() reports a missing key (json_full)")
|
|
{
|
|
custom_key_test::test_at<json_full>();
|
|
}
|
|
|
|
TEST_CASE("custom object key types: BSON (json_full)")
|
|
{
|
|
custom_key_test::test_bson<json_full>();
|
|
}
|
|
|
|
TEST_CASE("custom object key types: CBOR (json_full)")
|
|
{
|
|
custom_key_test::test_cbor<json_full>();
|
|
}
|
|
|
|
TEST_CASE("custom object key types: MessagePack (json_full)")
|
|
{
|
|
custom_key_test::test_msgpack<json_full>();
|
|
}
|