From a7bfc2212c1d6769065707bfe8394c29a4dc6654 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 10 Jan 2024 13:30:26 +0100 Subject: [PATCH] Fix `volatile bool` serialized as `1` or `0` Ported from 5d1d2721d144f636cb8eadf035d2bbf955cfd1a2 --- CHANGELOG.md | 1 + extras/tests/JsonVariant/types.cpp | 7 +++++++ src/ArduinoJson/Variant/VariantRefBaseImpl.hpp | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05ff61e3..800486db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ HEAD * Fix "no matching function" with `JsonObjectConst::operator[]` (issue #2019) * Remove unused files in the PlatformIO package +* Fix `volatile bool` serialized as `1` or `0` instead of `true` or `false` (issue #2029) v7.0.0 (2024-01-03) ------ diff --git a/extras/tests/JsonVariant/types.cpp b/extras/tests/JsonVariant/types.cpp index 24ac1641..eb0ee628 100644 --- a/extras/tests/JsonVariant/types.cpp +++ b/extras/tests/JsonVariant/types.cpp @@ -140,6 +140,13 @@ TEST_CASE("volatile") { JsonDocument doc; JsonVariant variant = doc.to(); + SECTION("volatile bool") { // issue #2029 + volatile bool f = true; + variant.set(f); + CHECK(variant.is() == true); + CHECK(variant.as() == true); + } + SECTION("volatile int") { volatile int f = 42; variant.set(f); diff --git a/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp b/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp index b28ede07..89e0edec 100644 --- a/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp +++ b/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp @@ -132,7 +132,8 @@ VariantRefBase::operator[](const TString& key) const { template template inline bool VariantRefBase::set(const T& value) const { - Converter::toJson(value, getOrCreateVariant()); + Converter::type>::toJson(value, + getOrCreateVariant()); auto resources = getResourceManager(); return resources && !resources->overflowed(); }