| 
									
										
										
										
											2018-01-18 00:56:58 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |   Copyright (c) 2009-2017 Dave Gamble and cJSON contributors | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Permission is hereby granted, free of charge, to any person obtaining a copy | 
					
						
							|  |  |  |   of this software and associated documentation files (the "Software"), to deal | 
					
						
							|  |  |  |   in the Software without restriction, including without limitation the rights | 
					
						
							|  |  |  |   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
					
						
							|  |  |  |   copies of the Software, and to permit persons to whom the Software is | 
					
						
							|  |  |  |   furnished to do so, subject to the following conditions: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   The above copyright notice and this permission notice shall be included in | 
					
						
							|  |  |  |   all copies or substantial portions of the Software. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
					
						
							|  |  |  |   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
					
						
							|  |  |  |   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
					
						
							|  |  |  |   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
					
						
							|  |  |  |   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
					
						
							|  |  |  |   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
					
						
							|  |  |  |   THE SOFTWARE. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-01 11:21:44 +03:00
										 |  |  | #ifndef cJSON_Utils__h
 | 
					
						
							|  |  |  | #define cJSON_Utils__h
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "C" | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | #include "cJSON.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-18 00:56:58 +02:00
										 |  |  | /* Implement RFC6901 (https://tools.ietf.org/html/rfc6901) JSON Pointer spec. */ | 
					
						
							|  |  |  | CJSON_PUBLIC(cJSON *) cJSONUtils_GetPointer(cJSON * const object, const char *pointer); | 
					
						
							|  |  |  | CJSON_PUBLIC(cJSON *) cJSONUtils_GetPointerCaseSensitive(cJSON * const object, const char *pointer); | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-18 00:56:58 +02:00
										 |  |  | /* Implement RFC6902 (https://tools.ietf.org/html/rfc6902) JSON Patch spec. */ | 
					
						
							|  |  |  | /* NOTE: This modifies objects in 'from' and 'to' by sorting the elements by their key */ | 
					
						
							|  |  |  | CJSON_PUBLIC(cJSON *) cJSONUtils_GeneratePatches(cJSON * const from, cJSON * const to); | 
					
						
							|  |  |  | CJSON_PUBLIC(cJSON *) cJSONUtils_GeneratePatchesCaseSensitive(cJSON * const from, cJSON * const to); | 
					
						
							|  |  |  | /* Utility for generating patch array entries. */ | 
					
						
							|  |  |  | CJSON_PUBLIC(void) cJSONUtils_AddPatchToArray(cJSON * const array, const char * const operation, const char * const path, const cJSON * const value); | 
					
						
							|  |  |  | /* Returns 0 for success. */ | 
					
						
							|  |  |  | CJSON_PUBLIC(int) cJSONUtils_ApplyPatches(cJSON * const object, const cJSON * const patches); | 
					
						
							|  |  |  | CJSON_PUBLIC(int) cJSONUtils_ApplyPatchesCaseSensitive(cJSON * const object, const cJSON * const patches); | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | // Note that ApplyPatches is NOT atomic on failure. To implement an atomic ApplyPatches, use:
 | 
					
						
							|  |  |  | //int cJSONUtils_AtomicApplyPatches(cJSON **object, cJSON *patches)
 | 
					
						
							|  |  |  | //{
 | 
					
						
							| 
									
										
										
										
											2018-01-18 00:56:58 +02:00
										 |  |  | //    cJSON *modme = cJSON_Duplicate(*object, 1);
 | 
					
						
							|  |  |  | //    int error = cJSONUtils_ApplyPatches(modme, patches);
 | 
					
						
							|  |  |  | //    if (!error)
 | 
					
						
							|  |  |  | //    {
 | 
					
						
							|  |  |  | //        cJSON_Delete(*object);
 | 
					
						
							|  |  |  | //        *object = modme;
 | 
					
						
							|  |  |  | //    }
 | 
					
						
							|  |  |  | //    else
 | 
					
						
							|  |  |  | //    {
 | 
					
						
							|  |  |  | //        cJSON_Delete(modme);
 | 
					
						
							|  |  |  | //    }
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //    return error;
 | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | //}
 | 
					
						
							|  |  |  | // Code not added to library since this strategy is a LOT slower.
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Implement RFC7386 (https://tools.ietf.org/html/rfc7396) JSON Merge Patch spec. */ | 
					
						
							| 
									
										
										
										
											2018-01-18 00:56:58 +02:00
										 |  |  | /* target will be modified by patch. return value is new ptr for target. */ | 
					
						
							|  |  |  | CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, const cJSON * const patch); | 
					
						
							|  |  |  | CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatchCaseSensitive(cJSON *target, const cJSON * const patch); | 
					
						
							|  |  |  | /* generates a patch to move from -> to */ | 
					
						
							|  |  |  | /* NOTE: This modifies objects in 'from' and 'to' by sorting the elements by their key */ | 
					
						
							|  |  |  | CJSON_PUBLIC(cJSON *) cJSONUtils_GenerateMergePatch(cJSON * const from, cJSON * const to); | 
					
						
							|  |  |  | CJSON_PUBLIC(cJSON *) cJSONUtils_GenerateMergePatchCaseSensitive(cJSON * const from, cJSON * const to); | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-18 00:56:58 +02:00
										 |  |  | /* Given a root object and a target object, construct a pointer from one to the other. */ | 
					
						
							|  |  |  | CJSON_PUBLIC(char *) cJSONUtils_FindPointerFromObjectTo(const cJSON * const object, const cJSON * const target); | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-18 00:56:58 +02:00
										 |  |  | /* Sorts the members of the object into alphabetical order. */ | 
					
						
							|  |  |  | CJSON_PUBLIC(void) cJSONUtils_SortObject(cJSON * const object); | 
					
						
							|  |  |  | CJSON_PUBLIC(void) cJSONUtils_SortObjectCaseSensitive(cJSON * const object); | 
					
						
							| 
									
										
										
										
											2019-10-01 11:21:44 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |