فهرست منبع

Added `as<std::string_view>()` and `is<std::string_view>()`

Benoit Blanchon 4 سال پیش
والد
کامیت
9d58e566fd
3فایلهای تغییر یافته به همراه29 افزوده شده و 0 حذف شده
  1. 1 0
      CHANGELOG.md
  2. 14 0
      extras/tests/Cpp17/string_view.cpp
  3. 14 0
      src/ArduinoJson/Variant/ConverterImpl.hpp

+ 1 - 0
CHANGELOG.md

@@ -5,6 +5,7 @@ HEAD
 ----
 
 * Changed return type of `convertToJson()` and `Converter<T>::toJson()` to `void`
+* Added `as<std::string_view>()` and `is<std::string_view>()`
 
 v6.18.2 (2021-07-19)
 -------

+ 14 - 0
extras/tests/Cpp17/string_view.cpp

@@ -58,6 +58,20 @@ TEST_CASE("string_view") {
     doc.add(std::string_view("example two", 7));
     REQUIRE(doc.memoryUsage() == JSON_ARRAY_SIZE(2) + 8);
   }
+
+  SECTION("as<std::string_view>()") {
+    doc["s"] = "Hello World";
+    doc["i"] = 42;
+    REQUIRE(doc["s"].as<std::string_view>() == std::string_view("Hello World"));
+    REQUIRE(doc["i"].as<std::string_view>() == std::string_view());
+  }
+
+  SECTION("is<std::string_view>()") {
+    doc["s"] = "Hello World";
+    doc["i"] = 42;
+    REQUIRE(doc["s"].is<std::string_view>() == true);
+    REQUIRE(doc["i"].is<std::string_view>() == false);
+  }
 }
 
 using ARDUINOJSON_NAMESPACE::adaptString;

+ 14 - 0
src/ArduinoJson/Variant/ConverterImpl.hpp

@@ -256,4 +256,18 @@ inline void convertToJson(const ::Printable& src, VariantRef dst) {
 
 #endif
 
+#if ARDUINOJSON_ENABLE_STRING_VIEW
+
+inline void convertFromJson(VariantConstRef src, std::string_view& dst) {
+  const char* str = src.as<const char*>();
+  if (str)  // the standard doesn't allow passing null to the constructor
+    dst = std::string_view(str);
+}
+
+inline bool canConvertFromJson(VariantConstRef src, const std::string_view&) {
+  return src.is<const char*>();
+}
+
+#endif
+
 }  // namespace ARDUINOJSON_NAMESPACE