From 8b1d38f92ac56dc664c2af324b5c82ee35fa5595 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Fri, 11 Mar 2022 18:53:00 +0100 Subject: [PATCH] as, as --- extras/tests/JsonVariant/as.cpp | 18 ++++++++++++++++++ src/ArduinoJson/Variant/VariantImpl.hpp | 8 ++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/extras/tests/JsonVariant/as.cpp b/extras/tests/JsonVariant/as.cpp index 57d0d908..fdc24abe 100644 --- a/extras/tests/JsonVariant/as.cpp +++ b/extras/tests/JsonVariant/as.cpp @@ -330,5 +330,23 @@ TEST_CASE("JsonVariant::as()") { variant.link(doc2); CHECK(variant.as() == 42); + CHECK(variant.as() == 42.0); + } + + SECTION("linked double") { + StaticJsonDocument<128> doc2; + doc2.set(42.0); + variant.link(doc2); + + CHECK(variant.as() == 42); + CHECK(variant.as() == 42.0); + } + + SECTION("linked string") { + StaticJsonDocument<128> doc2; + doc2.set("hello"); + variant.link(doc2); + + CHECK(variant.as() == "hello"); } } diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 57fabe37..d1e1ae27 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -17,8 +17,6 @@ namespace ARDUINOJSON_NAMESPACE { template inline T VariantData::asIntegral() const { - if (isPointer()) - return _content.asPointer->asIntegral(); switch (type()) { case VALUE_IS_BOOLEAN: return _content.asBoolean; @@ -31,6 +29,8 @@ inline T VariantData::asIntegral() const { return parseNumber(_content.asString.data); case VALUE_IS_FLOAT: return convertNumber(_content.asFloat); + case VALUE_IS_POINTER: + return _content.asPointer->asIntegral(); default: return 0; } @@ -67,6 +67,8 @@ inline T VariantData::asFloat() const { return parseNumber(_content.asString.data); case VALUE_IS_FLOAT: return static_cast(_content.asFloat); + case VALUE_IS_POINTER: + return _content.asPointer->asFloat(); default: return 0; } @@ -80,6 +82,8 @@ inline String VariantData::asString() const { case VALUE_IS_OWNED_STRING: return String(_content.asString.data, _content.asString.size, String::Copied); + case VALUE_IS_POINTER: + return _content.asPointer->asString(); default: return String(); }