// ArduinoJson - https://arduinojson.org // Copyright Benoit Blanchon 2014-2021 // MIT License #pragma once #include "lib/ArduinoJson/Configuration.hpp" #include "lib/ArduinoJson/Json/JsonSerializer.hpp" #include "lib/ArduinoJson/Serialization/measure.hpp" #include "lib/ArduinoJson/Serialization/serialize.hpp" namespace ARDUINOJSON_NAMESPACE { template class PrettyJsonSerializer : public JsonSerializer { typedef JsonSerializer base; public: PrettyJsonSerializer(TWriter writer) : base(writer), _nesting(0) {} size_t visitArray(const CollectionData &array) { VariantSlot *slot = array.head(); if (slot) { base::write("[\r\n"); _nesting++; while (slot != 0) { indent(); slot->data()->accept(*this); slot = slot->next(); base::write(slot ? ",\r\n" : "\r\n"); } _nesting--; indent(); base::write("]"); } else { base::write("[]"); } return this->bytesWritten(); } size_t visitObject(const CollectionData &object) { VariantSlot *slot = object.head(); if (slot) { base::write("{\r\n"); _nesting++; while (slot != 0) { indent(); base::visitString(slot->key()); base::write(": "); slot->data()->accept(*this); slot = slot->next(); base::write(slot ? ",\r\n" : "\r\n"); } _nesting--; indent(); base::write("}"); } else { base::write("{}"); } return this->bytesWritten(); } private: void indent() { for (uint8_t i = 0; i < _nesting; i++) base::write(ARDUINOJSON_TAB); } uint8_t _nesting; }; template size_t serializeJsonPretty(const TSource &source, TDestination &destination) { return serialize(source, destination); } template size_t serializeJsonPretty(const TSource &source, void *buffer, size_t bufferSize) { return serialize(source, buffer, bufferSize); } template size_t measureJsonPretty(const TSource &source) { return measure(source); } } // namespace ARDUINOJSON_NAMESPACE