as<double>, as<string>

This commit is contained in:
Benoit Blanchon
2022-03-11 18:53:00 +01:00
parent 6691c5170b
commit 8b1d38f92a
2 changed files with 24 additions and 2 deletions

View File

@@ -330,5 +330,23 @@ TEST_CASE("JsonVariant::as()") {
variant.link(doc2);
CHECK(variant.as<int>() == 42);
CHECK(variant.as<double>() == 42.0);
}
SECTION("linked double") {
StaticJsonDocument<128> doc2;
doc2.set(42.0);
variant.link(doc2);
CHECK(variant.as<int>() == 42);
CHECK(variant.as<double>() == 42.0);
}
SECTION("linked string") {
StaticJsonDocument<128> doc2;
doc2.set("hello");
variant.link(doc2);
CHECK(variant.as<std::string>() == "hello");
}
}

View File

@@ -17,8 +17,6 @@ namespace ARDUINOJSON_NAMESPACE {
template <typename T>
inline T VariantData::asIntegral() const {
if (isPointer())
return _content.asPointer->asIntegral<T>();
switch (type()) {
case VALUE_IS_BOOLEAN:
return _content.asBoolean;
@@ -31,6 +29,8 @@ inline T VariantData::asIntegral() const {
return parseNumber<T>(_content.asString.data);
case VALUE_IS_FLOAT:
return convertNumber<T>(_content.asFloat);
case VALUE_IS_POINTER:
return _content.asPointer->asIntegral<T>();
default:
return 0;
}
@@ -67,6 +67,8 @@ inline T VariantData::asFloat() const {
return parseNumber<T>(_content.asString.data);
case VALUE_IS_FLOAT:
return static_cast<T>(_content.asFloat);
case VALUE_IS_POINTER:
return _content.asPointer->asFloat<T>();
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();
}