mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Add as<JsonString>()
				
					
				
			This commit is contained in:
		| @@ -8,6 +8,7 @@ HEAD | |||||||
|   Dependent settings (like `ARDUINOJSON_DEFAULT_NESTING_LIMIT`) must be set individually. |   Dependent settings (like `ARDUINOJSON_DEFAULT_NESTING_LIMIT`) must be set individually. | ||||||
| * Change the default of `ARDUINOJSON_USE_DOUBLE` to `1` | * Change the default of `ARDUINOJSON_USE_DOUBLE` to `1` | ||||||
| * Change the default of `ARDUINOJSON_USE_LONG_LONG` to `1` on 32-bit platforms | * Change the default of `ARDUINOJSON_USE_LONG_LONG` to `1` on 32-bit platforms | ||||||
|  | * Add `as<JsonString>()` | ||||||
|  |  | ||||||
| v6.18.5 (2021-09-28) | v6.18.5 (2021-09-28) | ||||||
| ------- | ------- | ||||||
|   | |||||||
| @@ -24,6 +24,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(0.0f == variant.as<float>()); |     REQUIRE(0.0f == variant.as<float>()); | ||||||
|     REQUIRE(0 == variant.as<const char*>()); |     REQUIRE(0 == variant.as<const char*>()); | ||||||
|     REQUIRE("null" == variant.as<std::string>()); |     REQUIRE("null" == variant.as<std::string>()); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(4.2)") { |   SECTION("set(4.2)") { | ||||||
| @@ -34,6 +35,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<std::string>() == "4.2"); |     REQUIRE(variant.as<std::string>() == "4.2"); | ||||||
|     REQUIRE(variant.as<long>() == 4L); |     REQUIRE(variant.as<long>() == 4L); | ||||||
|     REQUIRE(variant.as<unsigned>() == 4U); |     REQUIRE(variant.as<unsigned>() == 4U); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(0.0)") { |   SECTION("set(0.0)") { | ||||||
| @@ -41,6 +43,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|  |  | ||||||
|     REQUIRE(variant.as<bool>() == false); |     REQUIRE(variant.as<bool>() == false); | ||||||
|     REQUIRE(variant.as<long>() == 0L); |     REQUIRE(variant.as<long>() == 0L); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(false)") { |   SECTION("set(false)") { | ||||||
| @@ -50,6 +53,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<double>() == 0.0); |     REQUIRE(variant.as<double>() == 0.0); | ||||||
|     REQUIRE(variant.as<long>() == 0L); |     REQUIRE(variant.as<long>() == 0L); | ||||||
|     REQUIRE(variant.as<std::string>() == "false"); |     REQUIRE(variant.as<std::string>() == "false"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(true)") { |   SECTION("set(true)") { | ||||||
| @@ -59,6 +63,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<double>() == 1.0); |     REQUIRE(variant.as<double>() == 1.0); | ||||||
|     REQUIRE(variant.as<long>() == 1L); |     REQUIRE(variant.as<long>() == 1L); | ||||||
|     REQUIRE(variant.as<std::string>() == "true"); |     REQUIRE(variant.as<std::string>() == "true"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(42)") { |   SECTION("set(42)") { | ||||||
| @@ -69,6 +74,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<int>() == 42); |     REQUIRE(variant.as<int>() == 42); | ||||||
|     REQUIRE(variant.as<unsigned int>() == 42U);  // issue #1601 |     REQUIRE(variant.as<unsigned int>() == 42U);  // issue #1601 | ||||||
|     REQUIRE(variant.as<std::string>() == "42"); |     REQUIRE(variant.as<std::string>() == "42"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(42L)") { |   SECTION("set(42L)") { | ||||||
| @@ -77,6 +83,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<bool>() == true); |     REQUIRE(variant.as<bool>() == true); | ||||||
|     REQUIRE(variant.as<double>() == 42.0); |     REQUIRE(variant.as<double>() == 42.0); | ||||||
|     REQUIRE(variant.as<std::string>() == "42"); |     REQUIRE(variant.as<std::string>() == "42"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(-42L)") { |   SECTION("set(-42L)") { | ||||||
| @@ -84,6 +91,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|  |  | ||||||
|     REQUIRE(variant.as<double>() == -42.0); |     REQUIRE(variant.as<double>() == -42.0); | ||||||
|     REQUIRE(variant.as<std::string>() == "-42"); |     REQUIRE(variant.as<std::string>() == "-42"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(42UL)") { |   SECTION("set(42UL)") { | ||||||
| @@ -92,6 +100,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<bool>() == true); |     REQUIRE(variant.as<bool>() == true); | ||||||
|     REQUIRE(variant.as<double>() == 42.0); |     REQUIRE(variant.as<double>() == 42.0); | ||||||
|     REQUIRE(variant.as<std::string>() == "42"); |     REQUIRE(variant.as<std::string>() == "42"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(0L)") { |   SECTION("set(0L)") { | ||||||
| @@ -100,6 +109,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<bool>() == false); |     REQUIRE(variant.as<bool>() == false); | ||||||
|     REQUIRE(variant.as<double>() == 0.0); |     REQUIRE(variant.as<double>() == 0.0); | ||||||
|     REQUIRE(variant.as<std::string>() == "0"); |     REQUIRE(variant.as<std::string>() == "0"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(0UL)") { |   SECTION("set(0UL)") { | ||||||
| @@ -108,6 +118,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<bool>() == false); |     REQUIRE(variant.as<bool>() == false); | ||||||
|     REQUIRE(variant.as<double>() == 0.0); |     REQUIRE(variant.as<double>() == 0.0); | ||||||
|     REQUIRE(variant.as<std::string>() == "0"); |     REQUIRE(variant.as<std::string>() == "0"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(null)") { |   SECTION("set(null)") { | ||||||
| @@ -117,12 +128,14 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<double>() == 0.0); |     REQUIRE(variant.as<double>() == 0.0); | ||||||
|     REQUIRE(variant.as<long>() == 0L); |     REQUIRE(variant.as<long>() == 0L); | ||||||
|     REQUIRE(variant.as<std::string>() == "null"); |     REQUIRE(variant.as<std::string>() == "null"); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(\"42\")") { |   SECTION("set(\"42\")") { | ||||||
|     variant.set("42"); |     variant.set("42"); | ||||||
|  |  | ||||||
|     REQUIRE(variant.as<long>() == 42L); |     REQUIRE(variant.as<long>() == 42L); | ||||||
|  |     REQUIRE(variant.as<JsonString>() == "42"); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(\"hello\")") { |   SECTION("set(\"hello\")") { | ||||||
| @@ -133,6 +146,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<const char*>() == std::string("hello")); |     REQUIRE(variant.as<const char*>() == std::string("hello")); | ||||||
|     REQUIRE(variant.as<const char*>() == std::string("hello")); |     REQUIRE(variant.as<const char*>() == std::string("hello")); | ||||||
|     REQUIRE(variant.as<std::string>() == std::string("hello")); |     REQUIRE(variant.as<std::string>() == std::string("hello")); | ||||||
|  |     REQUIRE(variant.as<JsonString>() == "hello"); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(std::string(\"4.2\"))") { |   SECTION("set(std::string(\"4.2\"))") { | ||||||
| @@ -143,6 +157,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<double>() == 4.2); |     REQUIRE(variant.as<double>() == 4.2); | ||||||
|     REQUIRE(variant.as<const char*>() == std::string("4.2")); |     REQUIRE(variant.as<const char*>() == std::string("4.2")); | ||||||
|     REQUIRE(variant.as<std::string>() == std::string("4.2")); |     REQUIRE(variant.as<std::string>() == std::string("4.2")); | ||||||
|  |     REQUIRE(variant.as<JsonString>() == "4.2"); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(\"true\")") { |   SECTION("set(\"true\")") { | ||||||
| @@ -150,6 +165,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|  |  | ||||||
|     REQUIRE(variant.as<bool>() == true); |     REQUIRE(variant.as<bool>() == true); | ||||||
|     REQUIRE(variant.as<int>() == 0); |     REQUIRE(variant.as<int>() == 0); | ||||||
|  |     REQUIRE(variant.as<JsonString>() == "true"); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(-1e300)") { |   SECTION("set(-1e300)") { | ||||||
| @@ -159,6 +175,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<double>() == -1e300); |     REQUIRE(variant.as<double>() == -1e300); | ||||||
|     REQUIRE(variant.as<float>() < 0); |     REQUIRE(variant.as<float>() < 0); | ||||||
|     REQUIRE(my::isinf(variant.as<float>())); |     REQUIRE(my::isinf(variant.as<float>())); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(1e300)") { |   SECTION("set(1e300)") { | ||||||
| @@ -168,6 +185,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<double>() == 1e300); |     REQUIRE(variant.as<double>() == 1e300); | ||||||
|     REQUIRE(variant.as<float>() > 0); |     REQUIRE(variant.as<float>() > 0); | ||||||
|     REQUIRE(my::isinf(variant.as<float>())); |     REQUIRE(my::isinf(variant.as<float>())); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("set(1e-300)") { |   SECTION("set(1e-300)") { | ||||||
| @@ -176,6 +194,7 @@ TEST_CASE("JsonVariant::as()") { | |||||||
|     REQUIRE(variant.as<bool>() == true); |     REQUIRE(variant.as<bool>() == true); | ||||||
|     REQUIRE(variant.as<double>() == 1e-300); |     REQUIRE(variant.as<double>() == 1e-300); | ||||||
|     REQUIRE(variant.as<float>() == 0); |     REQUIRE(variant.as<float>() == 0); | ||||||
|  |     REQUIRE(variant.as<JsonString>().isNull()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   SECTION("to<JsonObject>()") { |   SECTION("to<JsonObject>()") { | ||||||
|   | |||||||
| @@ -129,6 +129,18 @@ struct Converter<const char*> { | |||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct Converter<String> { | ||||||
|  |   static void toJson(String src, VariantRef dst) { | ||||||
|  |     variantSetString(getData(dst), adaptString(src), getPool(dst)); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static String fromJson(VariantConstRef src) { | ||||||
|  |     const VariantData* data = getData(src); | ||||||
|  |     return data ? String(data->asString(), false) : 0; | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
| template <typename T> | template <typename T> | ||||||
| inline typename enable_if<IsString<T>::value, bool>::type convertToJson( | inline typename enable_if<IsString<T>::value, bool>::type convertToJson( | ||||||
|     const T& src, VariantRef dst) { |     const T& src, VariantRef dst) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user