Replace VariantData& with VariantData* in deserializers

This commit is contained in:
Benoit Blanchon
2025-09-17 19:35:28 +02:00
parent 539b66fc7a
commit ed6b470896
3 changed files with 19 additions and 19 deletions

View File

@@ -50,7 +50,7 @@ DeserializationError doDeserialize(TDestination&& dst, TReader reader,
auto resources = VariantAttorney::getResourceManager(dst); auto resources = VariantAttorney::getResourceManager(dst);
dst.clear(); dst.clear();
auto err = TDeserializer<TReader>(resources, reader) auto err = TDeserializer<TReader>(resources, reader)
.parse(*data, options.filter, options.nestingLimit); .parse(data, options.filter, options.nestingLimit);
shrinkJsonDocument(dst); shrinkJsonDocument(dst);
return err; return err;
} }

View File

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

View File

@@ -24,10 +24,10 @@ class MsgPackDeserializer {
foundSomething_(false) {} foundSomething_(false) {}
template <typename TFilter> template <typename TFilter>
DeserializationError parse(VariantData& variant, TFilter filter, DeserializationError parse(VariantData* variant, TFilter filter,
DeserializationOption::NestingLimit nestingLimit) { DeserializationOption::NestingLimit nestingLimit) {
DeserializationError::Code err; DeserializationError::Code err;
err = parseVariant(&variant, filter, nestingLimit); err = parseVariant(variant, filter, nestingLimit);
return foundSomething_ ? err : DeserializationError::EmptyInput; return foundSomething_ ? err : DeserializationError::EmptyInput;
} }