diff --git a/src/ArduinoJson/Json/JsonSerializer.hpp b/src/ArduinoJson/Json/JsonSerializer.hpp index 8a21af5c..69f25646 100644 --- a/src/ArduinoJson/Json/JsonSerializer.hpp +++ b/src/ArduinoJson/Json/JsonSerializer.hpp @@ -68,8 +68,8 @@ class JsonSerializer : public VariantDataVisitor { return bytesWritten(); } - size_t visitString(const char* value, size_t n) { - formatter_.writeString(value, n); + size_t visitString(JsonString value) { + formatter_.writeString(value.c_str(), value.size()); return bytesWritten(); } diff --git a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp index 6bce3b5b..37283740 100644 --- a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp @@ -80,12 +80,14 @@ class MsgPackSerializer : public VariantDataVisitor { } size_t visitString(const char* value) { - return visitString(value, strlen(value)); + return visitString(JsonString(value)); } - size_t visitString(const char* value, size_t n) { + size_t visitString(JsonString value) { ARDUINOJSON_ASSERT(value != NULL); + auto n = value.size(); + if (n < 0x20) { writeByte(uint8_t(0xA0 + n)); } else if (n < 0x100) { @@ -98,7 +100,7 @@ class MsgPackSerializer : public VariantDataVisitor { writeByte(0xDB); writeInteger(uint32_t(n)); } - writeBytes(reinterpret_cast(value), n); + writeBytes(reinterpret_cast(value.c_str()), n); return bytesWritten(); } diff --git a/src/ArduinoJson/Variant/JsonVariantVisitor.hpp b/src/ArduinoJson/Variant/JsonVariantVisitor.hpp index bf7b38fc..1fe8fa3e 100644 --- a/src/ArduinoJson/Variant/JsonVariantVisitor.hpp +++ b/src/ArduinoJson/Variant/JsonVariantVisitor.hpp @@ -47,7 +47,7 @@ struct JsonVariantVisitor { return TResult(); } - TResult visitString(const char*, size_t) { + TResult visitString(JsonString) { return TResult(); } }; @@ -72,8 +72,8 @@ class VisitorAdapter { return visitor_->visitFloat(value); } - result_type visitString(const char* s, size_t n) { - return visitor_->visitString(s, n); + result_type visitString(JsonString value) { + return visitor_->visitString(value); } result_type visitRawString(const char* p, size_t n) { diff --git a/src/ArduinoJson/Variant/VariantCompare.hpp b/src/ArduinoJson/Variant/VariantCompare.hpp index 456b7748..09eb38bd 100644 --- a/src/ArduinoJson/Variant/VariantCompare.hpp +++ b/src/ArduinoJson/Variant/VariantCompare.hpp @@ -24,8 +24,8 @@ struct Comparer::value>::type> explicit Comparer(T value) : rhs(value) {} - CompareResult visitString(const char* lhs, size_t n) { - int i = stringCompare(adaptString(rhs), adaptString(lhs, n)); + CompareResult visitString(JsonString lhs) { + int i = stringCompare(adaptString(rhs), adaptString(lhs)); if (i < 0) return COMPARE_RESULT_GREATER; else if (i > 0) @@ -143,8 +143,8 @@ struct VariantComparer : ComparerBase { return reverseResult(comparer); } - CompareResult visitString(const char* lhs, size_t) { - Comparer comparer(lhs); + CompareResult visitString(JsonString lhs) { + Comparer comparer(lhs); return reverseResult(comparer); } diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index a8f23c2f..1d3bc4e7 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -37,12 +37,12 @@ class VariantData { return visitor.visitObject(content_.asObject); case VALUE_IS_LINKED_STRING: - return visitor.visitString(content_.asLinkedString, - strlen(content_.asLinkedString)); + return visitor.visitString(JsonString(content_.asLinkedString)); case VALUE_IS_OWNED_STRING: - return visitor.visitString(content_.asOwnedString->data, - content_.asOwnedString->length); + return visitor.visitString(JsonString(content_.asOwnedString->data, + content_.asOwnedString->length, + JsonString::Copied)); case VALUE_IS_RAW_STRING: return visitor.visitRawString(content_.asOwnedString->data, diff --git a/src/ArduinoJson/Variant/VariantDataVisitor.hpp b/src/ArduinoJson/Variant/VariantDataVisitor.hpp index 553602d9..a2ef3a84 100644 --- a/src/ArduinoJson/Variant/VariantDataVisitor.hpp +++ b/src/ArduinoJson/Variant/VariantDataVisitor.hpp @@ -47,7 +47,7 @@ struct VariantDataVisitor { return TResult(); } - TResult visitString(const char*, size_t) { + TResult visitString(JsonString) { return TResult(); } };