From 51937778dd225f67809dbb1494dc6a3dbedd626b Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Sun, 21 Nov 2021 15:07:56 +0100 Subject: [PATCH] Add `operator<<(std::ostream&, const JsonString&)` --- extras/tests/Misc/JsonString.cpp | 8 ++++++++ src/ArduinoJson/Strings/String.hpp | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/extras/tests/Misc/JsonString.cpp b/extras/tests/Misc/JsonString.cpp index 9ef8dc48..882112a4 100644 --- a/extras/tests/Misc/JsonString.cpp +++ b/extras/tests/Misc/JsonString.cpp @@ -5,6 +5,8 @@ #include #include +#include + TEST_CASE("JsonString") { SECTION("Default constructor creates a null JsonString") { JsonString s; @@ -74,4 +76,10 @@ TEST_CASE("JsonString") { CHECK(a == b); CHECK_FALSE(a != b); } + + SECTION("std::stream") { + std::stringstream ss; + ss << JsonString("hello world!"); + CHECK(ss.str() == "hello world!"); + } } diff --git a/src/ArduinoJson/Strings/String.hpp b/src/ArduinoJson/Strings/String.hpp index 268f5e54..e5cc4137 100644 --- a/src/ArduinoJson/Strings/String.hpp +++ b/src/ArduinoJson/Strings/String.hpp @@ -6,6 +6,10 @@ #include +#if ARDUINOJSON_ENABLE_STD_STREAM +# include +#endif + namespace ARDUINOJSON_NAMESPACE { class String : public SafeBoolIdom { @@ -61,6 +65,13 @@ class String : public SafeBoolIdom { return strcmp(lhs._data, rhs._data) != 0; } +#if ARDUINOJSON_ENABLE_STD_STREAM + friend std::ostream& operator<<(std::ostream& lhs, const String& rhs) { + lhs.write(rhs.c_str(), static_cast(rhs.size())); + return lhs; + } +#endif + private: const char* _data; size_t _size;