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. | ||||
| * Change the default of `ARDUINOJSON_USE_DOUBLE` to `1` | ||||
| * Change the default of `ARDUINOJSON_USE_LONG_LONG` to `1` on 32-bit platforms | ||||
| * Add `as<JsonString>()` | ||||
|  | ||||
| v6.18.5 (2021-09-28) | ||||
| ------- | ||||
|   | ||||
| @@ -24,6 +24,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(0.0f == variant.as<float>()); | ||||
|     REQUIRE(0 == variant.as<const char*>()); | ||||
|     REQUIRE("null" == variant.as<std::string>()); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(4.2)") { | ||||
| @@ -34,6 +35,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<std::string>() == "4.2"); | ||||
|     REQUIRE(variant.as<long>() == 4L); | ||||
|     REQUIRE(variant.as<unsigned>() == 4U); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(0.0)") { | ||||
| @@ -41,6 +43,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|  | ||||
|     REQUIRE(variant.as<bool>() == false); | ||||
|     REQUIRE(variant.as<long>() == 0L); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(false)") { | ||||
| @@ -50,6 +53,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<double>() == 0.0); | ||||
|     REQUIRE(variant.as<long>() == 0L); | ||||
|     REQUIRE(variant.as<std::string>() == "false"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(true)") { | ||||
| @@ -59,6 +63,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<double>() == 1.0); | ||||
|     REQUIRE(variant.as<long>() == 1L); | ||||
|     REQUIRE(variant.as<std::string>() == "true"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(42)") { | ||||
| @@ -69,6 +74,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<int>() == 42); | ||||
|     REQUIRE(variant.as<unsigned int>() == 42U);  // issue #1601 | ||||
|     REQUIRE(variant.as<std::string>() == "42"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(42L)") { | ||||
| @@ -77,6 +83,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<bool>() == true); | ||||
|     REQUIRE(variant.as<double>() == 42.0); | ||||
|     REQUIRE(variant.as<std::string>() == "42"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(-42L)") { | ||||
| @@ -84,6 +91,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|  | ||||
|     REQUIRE(variant.as<double>() == -42.0); | ||||
|     REQUIRE(variant.as<std::string>() == "-42"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(42UL)") { | ||||
| @@ -92,6 +100,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<bool>() == true); | ||||
|     REQUIRE(variant.as<double>() == 42.0); | ||||
|     REQUIRE(variant.as<std::string>() == "42"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(0L)") { | ||||
| @@ -100,6 +109,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<bool>() == false); | ||||
|     REQUIRE(variant.as<double>() == 0.0); | ||||
|     REQUIRE(variant.as<std::string>() == "0"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(0UL)") { | ||||
| @@ -108,6 +118,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<bool>() == false); | ||||
|     REQUIRE(variant.as<double>() == 0.0); | ||||
|     REQUIRE(variant.as<std::string>() == "0"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(null)") { | ||||
| @@ -117,12 +128,14 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<double>() == 0.0); | ||||
|     REQUIRE(variant.as<long>() == 0L); | ||||
|     REQUIRE(variant.as<std::string>() == "null"); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(\"42\")") { | ||||
|     variant.set("42"); | ||||
|  | ||||
|     REQUIRE(variant.as<long>() == 42L); | ||||
|     REQUIRE(variant.as<JsonString>() == "42"); | ||||
|   } | ||||
|  | ||||
|   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<std::string>() == std::string("hello")); | ||||
|     REQUIRE(variant.as<JsonString>() == "hello"); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(std::string(\"4.2\"))") { | ||||
| @@ -143,6 +157,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<double>() == 4.2); | ||||
|     REQUIRE(variant.as<const char*>() == std::string("4.2")); | ||||
|     REQUIRE(variant.as<std::string>() == std::string("4.2")); | ||||
|     REQUIRE(variant.as<JsonString>() == "4.2"); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(\"true\")") { | ||||
| @@ -150,6 +165,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|  | ||||
|     REQUIRE(variant.as<bool>() == true); | ||||
|     REQUIRE(variant.as<int>() == 0); | ||||
|     REQUIRE(variant.as<JsonString>() == "true"); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(-1e300)") { | ||||
| @@ -159,6 +175,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<double>() == -1e300); | ||||
|     REQUIRE(variant.as<float>() < 0); | ||||
|     REQUIRE(my::isinf(variant.as<float>())); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(1e300)") { | ||||
| @@ -168,6 +185,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<double>() == 1e300); | ||||
|     REQUIRE(variant.as<float>() > 0); | ||||
|     REQUIRE(my::isinf(variant.as<float>())); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   SECTION("set(1e-300)") { | ||||
| @@ -176,6 +194,7 @@ TEST_CASE("JsonVariant::as()") { | ||||
|     REQUIRE(variant.as<bool>() == true); | ||||
|     REQUIRE(variant.as<double>() == 1e-300); | ||||
|     REQUIRE(variant.as<float>() == 0); | ||||
|     REQUIRE(variant.as<JsonString>().isNull()); | ||||
|   } | ||||
|  | ||||
|   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> | ||||
| inline typename enable_if<IsString<T>::value, bool>::type convertToJson( | ||||
|     const T& src, VariantRef dst) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user