Change VariantData::asString() return type to JsonString

This commit is contained in:
Benoit Blanchon
2021-10-24 09:55:28 +02:00
parent acfa174333
commit a7873389c6
4 changed files with 12 additions and 8 deletions

View File

@ -136,6 +136,7 @@ TEST_CASE("JsonVariant::as()") {
REQUIRE(variant.as<long>() == 42L); REQUIRE(variant.as<long>() == 42L);
REQUIRE(variant.as<JsonString>() == "42"); REQUIRE(variant.as<JsonString>() == "42");
REQUIRE(variant.as<JsonString>().isStatic() == true);
} }
SECTION("set(\"hello\")") { SECTION("set(\"hello\")") {
@ -158,6 +159,7 @@ TEST_CASE("JsonVariant::as()") {
REQUIRE(variant.as<const char*>() == std::string("4.2")); REQUIRE(variant.as<const char*>() == std::string("4.2"));
REQUIRE(variant.as<std::string>() == std::string("4.2")); REQUIRE(variant.as<std::string>() == std::string("4.2"));
REQUIRE(variant.as<JsonString>() == "4.2"); REQUIRE(variant.as<JsonString>() == "4.2");
REQUIRE(variant.as<JsonString>().isStatic() == false);
} }
SECTION("set(\"true\")") { SECTION("set(\"true\")") {

View File

@ -120,7 +120,7 @@ struct Converter<const char*> {
static const char* fromJson(VariantConstRef src) { static const char* fromJson(VariantConstRef src) {
const VariantData* data = getData(src); const VariantData* data = getData(src);
return data ? data->asString() : 0; return data ? data->asString().c_str() : 0;
} }
static bool checkJson(VariantConstRef src) { static bool checkJson(VariantConstRef src) {
@ -137,7 +137,7 @@ struct Converter<String> {
static String fromJson(VariantConstRef src) { static String fromJson(VariantConstRef src) {
const VariantData* data = getData(src); const VariantData* data = getData(src);
return data ? String(data->asString(), false) : 0; return data ? data->asString() : 0;
} }
static bool checkJson(VariantConstRef src) { static bool checkJson(VariantConstRef src) {
@ -158,9 +158,9 @@ template <typename T>
inline typename enable_if<IsWriteableString<T>::value>::type convertFromJson( inline typename enable_if<IsWriteableString<T>::value>::type convertFromJson(
VariantConstRef src, T& dst) { VariantConstRef src, T& dst) {
const VariantData* data = getData(src); const VariantData* data = getData(src);
const char* cstr = data != 0 ? data->asString() : 0; String str = data != 0 ? data->asString() : 0;
if (cstr) if (str)
dst = cstr; dst = str.c_str();
else else
serializeJson(src, dst); serializeJson(src, dst);
} }

View File

@ -7,6 +7,7 @@
#include <ArduinoJson/Memory/MemoryPool.hpp> #include <ArduinoJson/Memory/MemoryPool.hpp>
#include <ArduinoJson/Misc/SerializedValue.hpp> #include <ArduinoJson/Misc/SerializedValue.hpp>
#include <ArduinoJson/Numbers/convertNumber.hpp> #include <ArduinoJson/Numbers/convertNumber.hpp>
#include <ArduinoJson/Strings/String.hpp>
#include <ArduinoJson/Strings/StringAdapters.hpp> #include <ArduinoJson/Strings/StringAdapters.hpp>
#include <ArduinoJson/Variant/VariantContent.hpp> #include <ArduinoJson/Variant/VariantContent.hpp>
@ -76,7 +77,7 @@ class VariantData {
template <typename T> template <typename T>
T asFloat() const; T asFloat() const;
const char *asString() const; String asString() const;
bool asBoolean() const; bool asBoolean() const;

View File

@ -70,11 +70,12 @@ inline T VariantData::asFloat() const {
} }
} }
inline const char *VariantData::asString() const { inline String VariantData::asString() const {
switch (type()) { switch (type()) {
case VALUE_IS_LINKED_STRING: case VALUE_IS_LINKED_STRING:
return String(_content.asString, true);
case VALUE_IS_OWNED_STRING: case VALUE_IS_OWNED_STRING:
return _content.asString; return String(_content.asString, false);
default: default:
return 0; return 0;
} }