diff --git a/include/ArduinoJson/JsonVariant.hpp b/include/ArduinoJson/JsonVariant.hpp index 1863c4e7..f4b41a77 100644 --- a/include/ArduinoJson/JsonVariant.hpp +++ b/include/ArduinoJson/JsonVariant.hpp @@ -11,17 +11,14 @@ #include "Internals/JsonVariantContent.hpp" #include "Internals/JsonVariantType.hpp" +#include "JsonPrintable.hpp" namespace ArduinoJson { class JsonArray; class JsonObject; -namespace Internals { -class JsonWriter; -} - -class JsonVariant { +class JsonVariant : public JsonPrintable { public: JsonVariant() : _type(Internals::JSON_UNDEFINED) {} diff --git a/test/Printers.cpp b/test/Printers.cpp index 01e9085e..d45758cc 100644 --- a/test/Printers.cpp +++ b/test/Printers.cpp @@ -5,14 +5,31 @@ // https://github.com/bblanchon/ArduinoJson #include "Printers.hpp" +#include + +class StreamPrintAdapter : public Print { + public: + StreamPrintAdapter(std::ostream& os) : _os(os) {} + + virtual size_t write(uint8_t c) { + _os << (char)c; + return 1; + } + + private: + std::ostream& _os; +}; std::ostream& ArduinoJson::operator<<(std::ostream& os, const ArduinoJson::JsonVariant& v) { - if (v.is()) - os << v.as(); - else if (v.is()) - os << v.as(); - else - os << "JsonVariant"; // TODO + StreamPrintAdapter adapter(os); + v.printTo(adapter); + return os; +} + +std::ostream& ArduinoJson::operator<<(std::ostream& os, + const ArduinoJson::JsonArray& v) { + StreamPrintAdapter adapter(os); + v.printTo(adapter); return os; } diff --git a/test/Printers.hpp b/test/Printers.hpp index 2b80ff8e..80f54a6a 100644 --- a/test/Printers.hpp +++ b/test/Printers.hpp @@ -11,4 +11,5 @@ namespace ArduinoJson { std::ostream& operator<<(std::ostream& os, const ArduinoJson::JsonVariant& v); +std::ostream& operator<<(std::ostream& os, const ArduinoJson::JsonArray& v); }