1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-11 10:18:15 +09:00

JSON: Port JsonArray and JsonObject serialization to serializers

This way, primitive JsonValue serialization is still handled by
JsonValue::serialize(), but JsonArray and JsonObject serialization
always goes through serializer classes. This is no less efficient
if you have the whole JSON in memory already.
This commit is contained in:
Sergey Bugaev 2019-08-27 14:15:30 +03:00 committed by Andreas Kling
parent 56f5c14d86
commit 216b7b3b80
Notes: sideshowbarker 2024-07-19 12:29:34 +09:00
2 changed files with 6 additions and 18 deletions

View file

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <AK/JsonArraySerializer.h>
#include <AK/JsonValue.h> #include <AK/JsonValue.h>
#include <AK/Vector.h> #include <AK/Vector.h>
@ -68,13 +69,8 @@ private:
template<typename Builder> template<typename Builder>
inline void JsonArray::serialize(Builder& builder) const inline void JsonArray::serialize(Builder& builder) const
{ {
builder.append('['); JsonArraySerializer serializer { builder };
for (int i = 0; i < m_values.size(); ++i) { for_each([&](auto& value) { serializer.add(value); });
m_values[i].serialize(builder);
if (i != size() - 1)
builder.append(',');
}
builder.append(']');
} }
template<typename Builder> template<typename Builder>

View file

@ -3,6 +3,7 @@
#include <AK/AKString.h> #include <AK/AKString.h>
#include <AK/HashMap.h> #include <AK/HashMap.h>
#include <AK/JsonArray.h> #include <AK/JsonArray.h>
#include <AK/JsonObjectSerializer.h>
#include <AK/JsonValue.h> #include <AK/JsonValue.h>
namespace AK { namespace AK {
@ -79,19 +80,10 @@ private:
template<typename Builder> template<typename Builder>
inline void JsonObject::serialize(Builder& builder) const inline void JsonObject::serialize(Builder& builder) const
{ {
int index = 0; JsonObjectSerializer serializer { builder };
builder.append('{');
for_each_member([&](auto& key, auto& value) { for_each_member([&](auto& key, auto& value) {
builder.append('"'); serializer.add(key, value);
builder.append(key);
builder.append('"');
builder.append(':');
value.serialize(builder);
if (index != size() - 1)
builder.append(',');
++index;
}); });
builder.append('}');
} }
template<typename Builder> template<typename Builder>