mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	Added JsonVariant as an input type for deserializeXxx()
				
					
				
			This commit is contained in:
		| @@ -9,6 +9,8 @@ HEAD | ||||
| * Visual Studio: fixed error C2766 with flag `/Zc:__cplusplus` (issue #1250) | ||||
| * Added support for `JsonDocument` to `copyArray()` (issue #1255) | ||||
| * Added support for `enum`s in `as<T>()` and `is<T>()`  (issue #1256) | ||||
| * Added `JsonVariant` as an input type for `deserializeXxx()`   | ||||
|   For example, you can do: `deserializeJson(doc2, doc1["payload"])` | ||||
|  | ||||
| v6.15.1 (2020-04-08) | ||||
| ------- | ||||
|   | ||||
| @@ -126,3 +126,57 @@ TEST_CASE("deserializeJson(CustomReader)") { | ||||
|   REQUIRE(doc[0] == 4); | ||||
|   REQUIRE(doc[1] == 2); | ||||
| } | ||||
|  | ||||
| TEST_CASE("deserializeJson(JsonDocument&, MemberProxy)") { | ||||
|   DynamicJsonDocument doc1(4096); | ||||
|   doc1["payload"] = "[4,2]"; | ||||
|  | ||||
|   DynamicJsonDocument doc2(4096); | ||||
|   DeserializationError err = deserializeJson(doc2, doc1["payload"]); | ||||
|  | ||||
|   REQUIRE(err == DeserializationError::Ok); | ||||
|   REQUIRE(doc2.size() == 2); | ||||
|   REQUIRE(doc2[0] == 4); | ||||
|   REQUIRE(doc2[1] == 2); | ||||
| } | ||||
|  | ||||
| TEST_CASE("deserializeJson(JsonDocument&, JsonVariant)") { | ||||
|   DynamicJsonDocument doc1(4096); | ||||
|   doc1["payload"] = "[4,2]"; | ||||
|  | ||||
|   DynamicJsonDocument doc2(4096); | ||||
|   DeserializationError err = | ||||
|       deserializeJson(doc2, doc1["payload"].as<JsonVariant>()); | ||||
|  | ||||
|   REQUIRE(err == DeserializationError::Ok); | ||||
|   REQUIRE(doc2.size() == 2); | ||||
|   REQUIRE(doc2[0] == 4); | ||||
|   REQUIRE(doc2[1] == 2); | ||||
| } | ||||
|  | ||||
| TEST_CASE("deserializeJson(JsonDocument&, JsonVariantConst)") { | ||||
|   DynamicJsonDocument doc1(4096); | ||||
|   doc1["payload"] = "[4,2]"; | ||||
|  | ||||
|   DynamicJsonDocument doc2(4096); | ||||
|   DeserializationError err = | ||||
|       deserializeJson(doc2, doc1["payload"].as<JsonVariantConst>()); | ||||
|  | ||||
|   REQUIRE(err == DeserializationError::Ok); | ||||
|   REQUIRE(doc2.size() == 2); | ||||
|   REQUIRE(doc2[0] == 4); | ||||
|   REQUIRE(doc2[1] == 2); | ||||
| } | ||||
|  | ||||
| TEST_CASE("deserializeJson(JsonDocument&, ElementProxy)") { | ||||
|   DynamicJsonDocument doc1(4096); | ||||
|   doc1[0] = "[4,2]"; | ||||
|  | ||||
|   DynamicJsonDocument doc2(4096); | ||||
|   DeserializationError err = deserializeJson(doc2, doc1[0]); | ||||
|  | ||||
|   REQUIRE(err == DeserializationError::Ok); | ||||
|   REQUIRE(doc2.size() == 2); | ||||
|   REQUIRE(doc2[0] == 4); | ||||
|   REQUIRE(doc2[1] == 2); | ||||
| } | ||||
|   | ||||
| @@ -37,6 +37,7 @@ struct BoundedReader { | ||||
|  | ||||
| #include <ArduinoJson/Deserialization/Readers/IteratorReader.hpp> | ||||
| #include <ArduinoJson/Deserialization/Readers/RamReader.hpp> | ||||
| #include <ArduinoJson/Deserialization/Readers/VariantReader.hpp> | ||||
|  | ||||
| #if ARDUINOJSON_ENABLE_ARDUINO_STREAM | ||||
| #include <ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp> | ||||
|   | ||||
							
								
								
									
										34
									
								
								src/ArduinoJson/Deserialization/Readers/VariantReader.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/ArduinoJson/Deserialization/Readers/VariantReader.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| // ArduinoJson - arduinojson.org | ||||
| // Copyright Benoit Blanchon 2014-2020 | ||||
| // MIT License | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <ArduinoJson/Object/MemberProxy.hpp> | ||||
| #include <ArduinoJson/Variant/VariantRef.hpp> | ||||
|  | ||||
| namespace ARDUINOJSON_NAMESPACE { | ||||
|  | ||||
| template <typename TArray> | ||||
| struct Reader<ElementProxy<TArray>, void> : Reader<char*, void> { | ||||
|   explicit Reader(const ElementProxy<TArray>& x) | ||||
|       : Reader<char*, void>(x.template as<const char*>()) {} | ||||
| }; | ||||
|  | ||||
| template <typename TObject, typename TStringRef> | ||||
| struct Reader<MemberProxy<TObject, TStringRef>, void> : Reader<char*, void> { | ||||
|   explicit Reader(const MemberProxy<TObject, TStringRef>& x) | ||||
|       : Reader<char*, void>(x.template as<const char*>()) {} | ||||
| }; | ||||
|  | ||||
| template <> | ||||
| struct Reader<VariantRef, void> : Reader<char*, void> { | ||||
|   explicit Reader(VariantRef x) : Reader<char*, void>(x.as<const char*>()) {} | ||||
| }; | ||||
|  | ||||
| template <> | ||||
| struct Reader<VariantConstRef, void> : Reader<char*, void> { | ||||
|   explicit Reader(VariantConstRef x) | ||||
|       : Reader<char*, void>(x.as<const char*>()) {} | ||||
| }; | ||||
| }  // namespace ARDUINOJSON_NAMESPACE | ||||
| @@ -7,6 +7,8 @@ | ||||
| #include <ArduinoJson/Configuration.hpp> | ||||
| #include <ArduinoJson/Operators/VariantOperators.hpp> | ||||
| #include <ArduinoJson/Polyfills/type_traits.hpp> | ||||
| #include <ArduinoJson/Variant/VariantRef.hpp> | ||||
| #include <ArduinoJson/Variant/VariantTo.hpp> | ||||
|  | ||||
| #ifdef _MSC_VER | ||||
| #pragma warning(push) | ||||
|   | ||||
| @@ -4,10 +4,17 @@ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <ArduinoJson/Variant/VariantRef.hpp> | ||||
| #include <ArduinoJson/Configuration.hpp> | ||||
| #include <ArduinoJson/Misc/Visitable.hpp> | ||||
| #include <ArduinoJson/Numbers/Float.hpp> | ||||
| #include <ArduinoJson/Numbers/Integer.hpp> | ||||
| #include <ArduinoJson/Polyfills/type_traits.hpp> | ||||
| #include <ArduinoJson/Strings/IsString.hpp> | ||||
|  | ||||
| namespace ARDUINOJSON_NAMESPACE { | ||||
|  | ||||
| class CollectionData; | ||||
|  | ||||
| template <typename T, typename Enable = void> | ||||
| struct Comparer; | ||||
|  | ||||
|   | ||||
| @@ -5,6 +5,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include <ArduinoJson/Strings/IsWriteableString.hpp> | ||||
| #include <ArduinoJson/Variant/VariantData.hpp> | ||||
|  | ||||
| namespace ARDUINOJSON_NAMESPACE { | ||||
|  | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <ArduinoJson/Polyfills/attributes.hpp> | ||||
| #include <ArduinoJson/Variant/VariantData.hpp> | ||||
|  | ||||
| namespace ARDUINOJSON_NAMESPACE { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user