diff --git a/include/json_beautifier.h b/include/json_beautifier.h index c6d5823..43c3b52 100644 --- a/include/json_beautifier.h +++ b/include/json_beautifier.h @@ -21,6 +21,8 @@ class JsonBeautifier: public JsonVisitor { // Empty on purpose. } + std::string beautify(JsonValue* json); + virtual void visitNull(const JsonNull* node) override; virtual void visitBoolean(const JsonBoolean* node) override; virtual void visitNumber(const JsonNumber* node) override; @@ -28,26 +30,24 @@ class JsonBeautifier: public JsonVisitor { virtual void visitObject(const JsonObject* node) override; virtual void visitArray(const JsonArray* node) override; + virtual ~JsonBeautifier() = default; + private: + void writeSpacing() { + for (uint16_t i = 0; i < _depth * _spacing; i++) { + _stream << _space_symbol; + } + } + void reset() { _depth = 0; _stream.str(std::string()); _stream.clear(); } - std::string beautify(JsonValue* json); - inline std::string beautifiedJson() const { return _stream.str(); } - virtual ~JsonBeautifier() = default; - private: - void writeSpacing() { - for (uint16_t i = 0; i < _depth * _spacing; i++) { - _stream << _space_symbol; - } - } - uint16_t _depth; uint8_t _spacing; char _space_symbol; diff --git a/include/json_minifier.h b/include/json_minifier.h index 197df91..0425f7b 100644 --- a/include/json_minifier.h +++ b/include/json_minifier.h @@ -7,6 +7,8 @@ namespace json { +class JsonValue; + class JsonMinifier: public JsonVisitor { public: JsonMinifier(): @@ -14,6 +16,8 @@ class JsonMinifier: public JsonVisitor { // Empty on purpose. } + std::string minify(JsonValue* json); + virtual void visitNull(const JsonNull* node) override; virtual void visitBoolean(const JsonBoolean* node) override; virtual void visitNumber(const JsonNumber* node) override; @@ -21,6 +25,8 @@ class JsonMinifier: public JsonVisitor { virtual void visitObject(const JsonObject* node) override; virtual void visitArray(const JsonArray* node) override; + virtual ~JsonMinifier() = default; + private: void reset() { _stream.str(std::string()); _stream.clear(); @@ -30,8 +36,6 @@ class JsonMinifier: public JsonVisitor { return _stream.str(); } - virtual ~JsonMinifier() = default; - private: std::stringstream _stream; }; diff --git a/src/json.cpp b/src/json.cpp index 017a2df..c5d0ed9 100644 --- a/src/json.cpp +++ b/src/json.cpp @@ -12,8 +12,7 @@ std::unique_ptr FromJson(const std::string& json) { std::string ToJson(JsonValue* json) { JsonMinifier minifier; - json->accept(&minifier); - return minifier.minifiedJson(); + return minifier.minify(json); } } // namespace json diff --git a/src/json_minifier.cpp b/src/json_minifier.cpp index a7619e3..503af69 100644 --- a/src/json_minifier.cpp +++ b/src/json_minifier.cpp @@ -10,6 +10,13 @@ namespace json { +std::string JsonMinifier::minify(JsonValue* json) { + json->accept(this); + const auto& minified_json = minifiedJson(); + reset(); + return minified_json; +} + void JsonMinifier::visitNull(const JsonNull* node) { _stream << "null"; }