MatureJsonObject.h 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. // Copyright 2024 Tracer Interactive, LLC. All Rights Reserved.
  2. #pragma once
  3. #include "CoreMinimal.h"
  4. #include "Serialization/JsonTypes.h"
  5. #include "Serialization/JsonSerializer.h"
  6. #include "Serialization/JsonReader.h"
  7. #include "Dom/JsonObject.h"
  8. #include "Dom/JsonValue.h"
  9. #include "UObject/StructOnScope.h"
  10. #include "MatureJsonValue.h"
  11. #include "json_cast.hpp"
  12. #include "MatureJsonObject.generated.h"
  13. typedef struct FMatureJsonList FMatureJsonList;
  14. USTRUCT(BlueprintType, meta = (DisplayName = "Mature JSON|Object"))
  15. struct MATUREJSON_API FMatureJsonObject
  16. {
  17. GENERATED_USTRUCT_BODY()
  18. public:
  19. FMatureJsonObject();
  20. FMatureJsonObject(TSharedPtr<mature::Document> Doc, const mature::Object&);
  21. FMatureJsonObject(TSharedPtr<mature::Document> Doc, const mature::Object&&);
  22. FMatureJsonObject(const FMatureJsonObject& rhs);
  23. FMatureJsonObject(const FMatureJsonObject&& rhs);
  24. public:
  25. FMatureJsonValue GetKey(const FString& key) const ;
  26. //FMatureJsonObject& SetValue( const FString& key, const FMatureJsonValue& Value);
  27. FMatureJsonObject& SetValue( const FLinearColor& Value );
  28. FMatureJsonObject& SetValue( const FRotator& Value );
  29. FMatureJsonObject& SetValue( const FTransform& Value );
  30. FMatureJsonObject& SetValue( const FVector& Value );
  31. FMatureJsonObject& SetValue( const FMatureJsonObject& Value);
  32. FMatureJsonObject& SetValue( const TMap<FString, FMatureJsonValue>& Value );
  33. FMatureJsonObject& SetValue( const TMap<FString, bool>& Value );
  34. FMatureJsonObject& SetValue( const TMap<FString, float>& Value );
  35. FMatureJsonObject& SetValue( const TMap<FString, double>& Value );
  36. FMatureJsonObject& SetValue( const TMap<FString, int32>& Value );
  37. FMatureJsonObject& SetValue( const TMap<FString, FString>& Value );
  38. FMatureJsonObject& SetValue( const TMap<FString, FDateTime>& Value );
  39. FMatureJsonObject& SetValue( const TMap<FString, FGuid>& Value );
  40. FMatureJsonObject& SetValue( const TMap<FString, FColor>& Value );
  41. FMatureJsonObject& SetValue( const TMap<FString, FLinearColor>& Value );
  42. FMatureJsonObject& SetValue( const TMap<FString, FRotator>& Value );
  43. FMatureJsonObject& SetValue( const TMap<FString, FTransform>& Value );
  44. FMatureJsonObject& SetValue( const TMap<FString, FVector>& Value );
  45. // Get the number of properties in this object.
  46. int32 Size() const;
  47. // Check is empty in this object.
  48. bool IsEmpty()const;
  49. // Clear the properties in this object.
  50. void Clear();
  51. // Check if this object has a property.
  52. bool HasKey( const FString& Key ) const;
  53. // Remove a property from this object.
  54. void RemoveKey( const FString& Key );
  55. // Add a JSON object to this object.
  56. FMatureJsonObject& AddValue(const FMatureJsonObject& Object);
  57. // Add a map of booleans to this object.
  58. FMatureJsonObject& AddValue(const TMap<FString, bool>& Map);
  59. // Add a map of floats to this object.
  60. FMatureJsonObject& AddValue(const TMap<FString, float>& Map);
  61. // Add a map of integers to this object.
  62. FMatureJsonObject& AddValue(const TMap<FString, int32>& Map);
  63. // Add a map of numbers to this object.
  64. FMatureJsonObject& AddValue(const TMap<FString, double>& Map);
  65. // Add a map of strings to this object.
  66. FMatureJsonObject& AddValue(const TMap<FString, FString>& Map);
  67. // Add a map of date/times to this object.
  68. FMatureJsonObject& AddValue(const TMap<FString, FDateTime>& Map);
  69. // Add a map of GUIDs to this object.
  70. FMatureJsonObject& AddValue(const TMap<FString, FGuid>& Map);
  71. // Add a map of colors to this object.
  72. FMatureJsonObject& AddValue(const TMap<FString, FColor>& Map);
  73. // Add a map of linear colors to this object.
  74. FMatureJsonObject& AddValue(const TMap<FString, FLinearColor>& Map);
  75. // Add a map of rotators to this object.
  76. FMatureJsonObject& AddValue(const TMap<FString, FRotator>& Map);
  77. // Add a map of transforms to this object.
  78. FMatureJsonObject& AddValue(const TMap<FString, FTransform>& Map);
  79. // Add a map of vectors to this object.
  80. FMatureJsonObject& AddValue(const TMap<FString, FVector>& Map);
  81. //
  82. FMatureJsonObject& AddValue(const TMap<FString, FMatureJsonValue>& Map);
  83. // Set a property as a boolean.
  84. FMatureJsonObject& AddValue(const FString& Key, bool Value);
  85. // Set a property as a float.
  86. FMatureJsonObject& AddValue(const FString& Key, float Value);
  87. // Set a property as an integer.
  88. FMatureJsonObject& AddValue(const FString& Key, int32 Value);
  89. // Set a property as a number.
  90. FMatureJsonObject& AddValue(const FString& Key, double Value);
  91. // Set a property as a string.
  92. FMatureJsonObject& AddValue(const FString& Key, const TCHAR* Value);
  93. // Set a property as a string.
  94. FMatureJsonObject& AddValue(const FString& Key, const FString& Value);
  95. // Set a property as a date/time.
  96. FMatureJsonObject& AddValue(const FString& Key, const FDateTime& Value);
  97. // Set a property as a GUID.
  98. FMatureJsonObject& AddValue(const FString& Key, const FGuid& Value);
  99. // Set a property as a color.
  100. FMatureJsonObject& AddValue(const FString& Key, const FColor& Value);
  101. // Set a property as a linear color.
  102. FMatureJsonObject& AddValue(const FString& Key, const FLinearColor& Value);
  103. // Set a property as a rotator.
  104. FMatureJsonObject& AddValue(const FString& Key, const FRotator& Value);
  105. // Set a property as a transform.
  106. FMatureJsonObject& AddValue(const FString& Key, const FTransform& Value);
  107. // Set a property as a vector.
  108. FMatureJsonObject& AddValue(const FString& Key, const FVector& Value);
  109. // Set a property as a JSON value.
  110. FMatureJsonObject& AddValue(const FString& Key, const FMatureJsonValue& Value);
  111. // Set a property as a JSON object.
  112. FMatureJsonObject& AddValue(const FString& Key, const FMatureJsonObject& Value);
  113. // Set a property as a JSON array.
  114. FMatureJsonObject& AddValue(const FString& Key, const FMatureJsonList& Value);
  115. // Set a property as an array of JSON values.
  116. FMatureJsonObject& AddValue(const FString& Key, const TArray<FMatureJsonValue>& Value);
  117. // Set a property as a map of JSON values.
  118. FMatureJsonObject& AddValue(const FString& Key, const TMap<FString, FMatureJsonValue>& Value);
  119. // add a property as a list.
  120. FMatureJsonList AddList(const FString& Key);
  121. // add a property as a object.
  122. FMatureJsonObject AddObject(const FString& Key);
  123. //
  124. FMatureJsonValue AddValue(const FString& key);
  125. TArray<FString> GetKeys() const;
  126. void GetValue(FLinearColor& value);
  127. void GetValue(FRotator& value);
  128. void GetValue(FTransform& value);
  129. void GetValue(FVector& value);
  130. bool GetValue(const FString& Key, bool& ) const;
  131. bool GetValue(const FString& Key, float&) const;
  132. bool GetValue(const FString& Key, uint32&) const;
  133. bool GetValue(const FString& Key, int32&) const;
  134. bool GetValue(const FString& Key, uint64&) const;
  135. bool GetValue(const FString& Key, int64&) const;
  136. bool GetValue(const FString& Key, double&) const;
  137. bool GetValue(const FString& Key, FString&) const;
  138. bool GetValue(const FString& Key, FGuid&) const;
  139. bool GetValue(const FString& Key, FColor&) const;
  140. bool GetValue(const FString& Key, FDateTime&) const;
  141. bool GetValue(const FString& Key, FLinearColor&) const;
  142. bool GetValue(const FString& Key, FRotator&) const;
  143. bool GetValue(const FString& Key, FTransform&) const;
  144. bool GetValue(const FString& Key, FVector&) const;
  145. bool GetValue(const FString& Key, FMatureJsonValue&) const;
  146. bool GetValue(const FString& Key, FMatureJsonObject&) const;
  147. bool GetValue(const FString& Key, FMatureJsonList&) const;
  148. FMatureJsonValue ToValue(const FString& Key) const;
  149. FMatureJsonObject ToObject(const FString& Key) const;
  150. FMatureJsonList ToList(const FString& Key) const;
  151. FMatureJsonObject& operator=(const FMatureJsonObject& Value);
  152. TSharedPtr<mature::Document> Document();
  153. TSharedPtr<mature::Document> Document()const;
  154. protected:
  155. class ObjectWrap {
  156. public:
  157. ObjectWrap();
  158. //ObjectWrap(TSharedPtr<mature::Document> Doc);
  159. ObjectWrap(TSharedPtr<mature::Document> Doc, const mature::Object& Ref);
  160. ObjectWrap(TSharedPtr<mature::Document> Doc, const mature::Object&& Ref);
  161. mature::MemberIterator Begin();
  162. mature::MemberIterator End();
  163. private:
  164. TSharedPtr<mature::Document> Document;
  165. mature::Object Object;
  166. friend struct FMatureJsonObject;
  167. friend struct FMatureJsonObjectIterator;
  168. };
  169. TSharedPtr<ObjectWrap> ObjectPtr;
  170. FMatureJsonValue AddKey(const FString& key) ;
  171. inline mature::Object& Object();
  172. inline mature::Object& Object() const;
  173. inline mature::Allocator& GetAllocator();
  174. inline mature::Allocator& GetAllocator()const;
  175. private:
  176. friend struct FMatureJsonList;
  177. friend struct FMatureJsonValue;
  178. friend struct FMatureJsonObjectIterator;
  179. };
  180. USTRUCT(BlueprintType, meta = (DisplayName = "Mature JSON|Object Iterator"))
  181. struct MATUREJSON_API FMatureJsonObjectIterator {
  182. GENERATED_USTRUCT_BODY()
  183. public:
  184. FMatureJsonObjectIterator();
  185. FMatureJsonObjectIterator(const FMatureJsonObject& Value);
  186. FMatureJsonObjectIterator& Begin();
  187. FMatureJsonObjectIterator& End();
  188. bool IsValid()const;
  189. void Next(int step = 1);
  190. FString Key() ;
  191. FMatureJsonValue Value();
  192. FString Key() const;
  193. FMatureJsonValue Value()const;
  194. FMatureJsonObjectIterator& operator++();
  195. FMatureJsonObjectIterator& operator--();
  196. FMatureJsonObjectIterator& operator++(int);
  197. FMatureJsonObjectIterator& operator--(int);
  198. FMatureJsonObjectIterator& operator=(const FMatureJsonObject& Value);
  199. FMatureJsonObjectIterator& operator=(const FMatureJsonObjectIterator& Value);
  200. private:
  201. TSharedPtr<FMatureJsonObject::ObjectWrap> ObjectPtr;
  202. mature::MemberIterator Iterator;
  203. };