mirror of
https://github.com/eledio-devices/thirdparty-ArduinoJson.git
synced 2025-11-01 08:48:30 +01:00
Added implicit conversion from JsonArray and JsonObject to JsonVariant
This commit is contained in:
@@ -34,7 +34,7 @@ inline bool JsonVariant::set(
|
||||
inline bool JsonVariant::set(const JsonVariant& value) {
|
||||
if (!_data) return false;
|
||||
if (!value._data) {
|
||||
_data->setNull();
|
||||
_data->type = Internals::JSON_NULL;
|
||||
return true;
|
||||
}
|
||||
switch (value._data->type) {
|
||||
@@ -59,7 +59,10 @@ inline typename Internals::enable_if<
|
||||
JsonArray>::value,
|
||||
JsonArray>::type
|
||||
JsonVariant::as() const {
|
||||
return _data ? JsonArray(_memoryPool, _data->asArray()) : JsonArray();
|
||||
if (_data && _data->type == Internals::JSON_ARRAY)
|
||||
return JsonArray(_memoryPool, &_data->content.asArray);
|
||||
else
|
||||
return JsonArray();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -68,7 +71,10 @@ inline typename Internals::enable_if<
|
||||
JsonObject>::value,
|
||||
T>::type
|
||||
JsonVariant::as() const {
|
||||
return _data ? JsonObject(_memoryPool, _data->asObject()) : JsonObject();
|
||||
if (_data && _data->type == Internals::JSON_OBJECT)
|
||||
return JsonObject(_memoryPool, &_data->content.asObject);
|
||||
else
|
||||
return JsonObject();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -76,7 +82,10 @@ inline typename Internals::enable_if<Internals::is_same<T, JsonArray>::value,
|
||||
JsonArray>::type
|
||||
JsonVariant::to() {
|
||||
if (!_data) return JsonArray();
|
||||
return JsonArray(_memoryPool, _data->toArray());
|
||||
_data->type = Internals::JSON_ARRAY;
|
||||
_data->content.asArray.head = 0;
|
||||
_data->content.asArray.tail = 0;
|
||||
return JsonArray(_memoryPool, &_data->content.asArray);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -84,7 +93,10 @@ typename Internals::enable_if<Internals::is_same<T, JsonObject>::value,
|
||||
JsonObject>::type
|
||||
JsonVariant::to() {
|
||||
if (!_data) return JsonObject();
|
||||
return JsonObject(_memoryPool, _data->toObject());
|
||||
_data->type = Internals::JSON_OBJECT;
|
||||
_data->content.asObject.head = 0;
|
||||
_data->content.asObject.tail = 0;
|
||||
return JsonObject(_memoryPool, &_data->content.asObject);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -92,7 +104,7 @@ typename Internals::enable_if<Internals::is_same<T, JsonVariant>::value,
|
||||
JsonVariant>::type
|
||||
JsonVariant::to() {
|
||||
if (!_data) return JsonVariant();
|
||||
_data->setNull();
|
||||
_data->type = Internals::JSON_NULL;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user