|
|
@@ -28,13 +28,13 @@ class JsonDeserializer {
|
|
|
resources_(resources) {}
|
|
|
|
|
|
template <typename TFilter>
|
|
|
- DeserializationError parse(VariantData& variant, TFilter filter,
|
|
|
+ DeserializationError parse(VariantData* variant, TFilter filter,
|
|
|
DeserializationOption::NestingLimit nestingLimit) {
|
|
|
DeserializationError::Code err;
|
|
|
|
|
|
err = parseVariant(variant, filter, nestingLimit);
|
|
|
|
|
|
- if (!err && latch_.last() != 0 && variant.isFloat()) {
|
|
|
+ if (!err && latch_.last() != 0 && variant->isFloat()) {
|
|
|
// We don't detect trailing characters earlier, so we need to check now
|
|
|
return DeserializationError::InvalidInput;
|
|
|
}
|
|
|
@@ -60,7 +60,7 @@ class JsonDeserializer {
|
|
|
|
|
|
template <typename TFilter>
|
|
|
DeserializationError::Code parseVariant(
|
|
|
- VariantData& variant, TFilter filter,
|
|
|
+ VariantData* variant, TFilter filter,
|
|
|
DeserializationOption::NestingLimit nestingLimit) {
|
|
|
DeserializationError::Code err;
|
|
|
|
|
|
@@ -71,13 +71,13 @@ class JsonDeserializer {
|
|
|
switch (current()) {
|
|
|
case '[':
|
|
|
if (filter.allowArray())
|
|
|
- return parseArray(variant.toArray(resources_), filter, nestingLimit);
|
|
|
+ return parseArray(variant->toArray(resources_), filter, nestingLimit);
|
|
|
else
|
|
|
return skipArray(nestingLimit);
|
|
|
|
|
|
case '{':
|
|
|
if (filter.allowObject())
|
|
|
- return parseObject(variant.toObject(resources_), filter,
|
|
|
+ return parseObject(variant->toObject(resources_), filter,
|
|
|
nestingLimit);
|
|
|
else
|
|
|
return skipObject(nestingLimit);
|
|
|
@@ -91,12 +91,12 @@ class JsonDeserializer {
|
|
|
|
|
|
case 't':
|
|
|
if (filter.allowValue())
|
|
|
- variant.setBoolean(true);
|
|
|
+ variant->setBoolean(true);
|
|
|
return skipKeyword("true");
|
|
|
|
|
|
case 'f':
|
|
|
if (filter.allowValue())
|
|
|
- variant.setBoolean(false);
|
|
|
+ variant->setBoolean(false);
|
|
|
return skipKeyword("false");
|
|
|
|
|
|
case 'n':
|
|
|
@@ -178,7 +178,7 @@ class JsonDeserializer {
|
|
|
return DeserializationError::NoMemory;
|
|
|
|
|
|
// 1 - Parse value
|
|
|
- err = parseVariant(*value, elementFilter, nestingLimit.decrement());
|
|
|
+ err = parseVariant(value, elementFilter, nestingLimit.decrement());
|
|
|
if (err)
|
|
|
return err;
|
|
|
} else {
|
|
|
@@ -286,7 +286,7 @@ class JsonDeserializer {
|
|
|
}
|
|
|
|
|
|
// Parse value
|
|
|
- err = parseVariant(*member, memberFilter, nestingLimit.decrement());
|
|
|
+ err = parseVariant(member, memberFilter, nestingLimit.decrement());
|
|
|
if (err)
|
|
|
return err;
|
|
|
} else {
|
|
|
@@ -380,7 +380,7 @@ class JsonDeserializer {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- DeserializationError::Code parseStringValue(VariantData& variant) {
|
|
|
+ DeserializationError::Code parseStringValue(VariantData* variant) {
|
|
|
DeserializationError::Code err;
|
|
|
|
|
|
stringBuilder_.startString();
|
|
|
@@ -389,7 +389,7 @@ class JsonDeserializer {
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- stringBuilder_.save(&variant);
|
|
|
+ stringBuilder_.save(variant);
|
|
|
|
|
|
return DeserializationError::Ok;
|
|
|
}
|
|
|
@@ -505,7 +505,7 @@ class JsonDeserializer {
|
|
|
return DeserializationError::Ok;
|
|
|
}
|
|
|
|
|
|
- DeserializationError::Code parseNumericValue(VariantData& result) {
|
|
|
+ DeserializationError::Code parseNumericValue(VariantData* result) {
|
|
|
uint8_t n = 0;
|
|
|
|
|
|
char c = current();
|
|
|
@@ -519,26 +519,26 @@ class JsonDeserializer {
|
|
|
auto number = parseNumber(buffer_);
|
|
|
switch (number.type()) {
|
|
|
case NumberType::UnsignedInteger:
|
|
|
- if (result.setInteger(number.asUnsignedInteger(), resources_))
|
|
|
+ if (result->setInteger(number.asUnsignedInteger(), resources_))
|
|
|
return DeserializationError::Ok;
|
|
|
else
|
|
|
return DeserializationError::NoMemory;
|
|
|
|
|
|
case NumberType::SignedInteger:
|
|
|
- if (result.setInteger(number.asSignedInteger(), resources_))
|
|
|
+ if (result->setInteger(number.asSignedInteger(), resources_))
|
|
|
return DeserializationError::Ok;
|
|
|
else
|
|
|
return DeserializationError::NoMemory;
|
|
|
|
|
|
case NumberType::Float:
|
|
|
- if (result.setFloat(number.asFloat(), resources_))
|
|
|
+ if (result->setFloat(number.asFloat(), resources_))
|
|
|
return DeserializationError::Ok;
|
|
|
else
|
|
|
return DeserializationError::NoMemory;
|
|
|
|
|
|
#if ARDUINOJSON_USE_DOUBLE
|
|
|
case NumberType::Double:
|
|
|
- if (result.setFloat(number.asDouble(), resources_))
|
|
|
+ if (result->setFloat(number.asDouble(), resources_))
|
|
|
return DeserializationError::Ok;
|
|
|
else
|
|
|
return DeserializationError::NoMemory;
|