diff --git a/src/ArduinoJson/Json/JsonSerializer.hpp b/src/ArduinoJson/Json/JsonSerializer.hpp index 69f25646..8fe5a9e9 100644 --- a/src/ArduinoJson/Json/JsonSerializer.hpp +++ b/src/ArduinoJson/Json/JsonSerializer.hpp @@ -73,8 +73,8 @@ class JsonSerializer : public VariantDataVisitor { return bytesWritten(); } - size_t visitRawString(const char* data, size_t n) { - formatter_.writeRaw(data, n); + size_t visitRawString(RawString value) { + formatter_.writeRaw(value.data(), value.size()); return bytesWritten(); } diff --git a/src/ArduinoJson/Misc/SerializedValue.hpp b/src/ArduinoJson/Misc/SerializedValue.hpp index ae9abd3c..74616cfd 100644 --- a/src/ArduinoJson/Misc/SerializedValue.hpp +++ b/src/ArduinoJson/Misc/SerializedValue.hpp @@ -51,6 +51,8 @@ class SerializedValue { size_t size_; }; +using RawString = SerializedValue; + template inline SerializedValue serialized(T str) { return SerializedValue(str); diff --git a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp index 37283740..d6f118fb 100644 --- a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp @@ -104,8 +104,8 @@ class MsgPackSerializer : public VariantDataVisitor { return bytesWritten(); } - size_t visitRawString(const char* data, size_t size) { - writeBytes(reinterpret_cast(data), size); + size_t visitRawString(RawString value) { + writeBytes(reinterpret_cast(value.data()), value.size()); return bytesWritten(); } diff --git a/src/ArduinoJson/Variant/JsonVariantVisitor.hpp b/src/ArduinoJson/Variant/JsonVariantVisitor.hpp index 1fe8fa3e..bb16d09e 100644 --- a/src/ArduinoJson/Variant/JsonVariantVisitor.hpp +++ b/src/ArduinoJson/Variant/JsonVariantVisitor.hpp @@ -43,7 +43,7 @@ struct JsonVariantVisitor { return TResult(); } - TResult visitRawString(const char*, size_t) { + TResult visitRawString(RawString) { return TResult(); } @@ -76,8 +76,8 @@ class VisitorAdapter { return visitor_->visitString(value); } - result_type visitRawString(const char* p, size_t n) { - return visitor_->visitRawString(p, n); + result_type visitRawString(RawString value) { + return visitor_->visitRawString(value); } result_type visitSignedInteger(JsonInteger value) { diff --git a/src/ArduinoJson/Variant/VariantCompare.hpp b/src/ArduinoJson/Variant/VariantCompare.hpp index 09eb38bd..0a05d02c 100644 --- a/src/ArduinoJson/Variant/VariantCompare.hpp +++ b/src/ArduinoJson/Variant/VariantCompare.hpp @@ -105,15 +105,13 @@ struct ObjectComparer : ComparerBase { }; struct RawComparer : ComparerBase { - const char* rhsData_; - size_t rhsSize_; + RawString rhs_; - explicit RawComparer(const char* rhsData, size_t rhsSize) - : rhsData_(rhsData), rhsSize_(rhsSize) {} + explicit RawComparer(RawString rhs) : rhs_(rhs) {} - CompareResult visitRawString(const char* lhsData, size_t lhsSize) { - size_t size = rhsSize_ < lhsSize ? rhsSize_ : lhsSize; - int n = memcmp(lhsData, rhsData_, size); + CompareResult visitRawString(RawString lhs) { + size_t size = rhs_.size() < lhs.size() ? rhs_.size() : lhs.size(); + int n = memcmp(lhs.data(), rhs_.data(), size); if (n < 0) return COMPARE_RESULT_LESS; else if (n > 0) @@ -148,8 +146,8 @@ struct VariantComparer : ComparerBase { return reverseResult(comparer); } - CompareResult visitRawString(const char* lhsData, size_t lhsSize) { - RawComparer comparer(lhsData, lhsSize); + CompareResult visitRawString(RawString value) { + RawComparer comparer(value); return reverseResult(comparer); } diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 1d3bc4e7..5aec374f 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -45,8 +45,8 @@ class VariantData { JsonString::Copied)); case VALUE_IS_RAW_STRING: - return visitor.visitRawString(content_.asOwnedString->data, - content_.asOwnedString->length); + return visitor.visitRawString(RawString( + content_.asOwnedString->data, content_.asOwnedString->length)); case VALUE_IS_SIGNED_INTEGER: return visitor.visitSignedInteger(content_.asSignedInteger); diff --git a/src/ArduinoJson/Variant/VariantDataVisitor.hpp b/src/ArduinoJson/Variant/VariantDataVisitor.hpp index a2ef3a84..01a5da24 100644 --- a/src/ArduinoJson/Variant/VariantDataVisitor.hpp +++ b/src/ArduinoJson/Variant/VariantDataVisitor.hpp @@ -43,7 +43,7 @@ struct VariantDataVisitor { return TResult(); } - TResult visitRawString(const char*, size_t) { + TResult visitRawString(RawString) { return TResult(); }