5#include "CoreMinimal.h"
6#include "Detail/JsonObjectDeserialization.h"
7#include "Dom/JsonValue.h"
8#include "Kismet/BlueprintFunctionLibrary.h"
11#include "AdditionalFields.generated.h"
14struct STREAMJSON_API FAdditionalFields
19 void SetString(const FName& Field, const FString& Value);
20 void SetString(const FName& Field, const TCHAR* Value);
21 void SetBool(const FName& Field,
bool bValue);
22 void SetJsonValue(const FName& Field, const TSharedRef<FJsonValue>&);
24 void SetNumber(const FName& Field, T Value);
26 void SetArray(const FName& Field, const TArray<T>& Value);
29 void Set(const FName& Field, const T& Value);
31 TOptional<FString> GetString(const FName& Field) const;
32 TOptional<
bool> GetBool(const FName& Field) const;
34 TOptional<T> GetNumber(const FName& Field) const;
37 TOptional<T> Get(const FName& Field) const;
39 const TMap<FName, TSharedPtr<FJsonValue>>& GetFields() const;
41 static FAdditionalFields* FromProperty(
void* Struct, FProperty* Property);
42 static const FAdditionalFields* FromProperty(const
void* Struct, FProperty* Property);
45 TMap<FName, TSharedPtr<FJsonValue>> Inner;
50void FAdditionalFields::SetNumber(const FName& Field, T Value)
52 Inner.Add(Field, MakeShared<FJsonValueNumber>(Value));
56void FAdditionalFields::Set(
const FName& Field,
const T& Value)
58 const TSharedRef<FJsonObject> Object = JsonObject::UStructToJsonObject<T>(Value);
59 Inner.Add(Field, MakeShared<FJsonValueObject>(Object));
63void FAdditionalFields::SetArray(
const FName& Field,
const TArray<T>& Value)
65 TArray<TSharedPtr<FJsonValue>> JsonValues;
66 JsonValues.Reserve(Value.Num());
67 for (
const T& Elem : Value)
69 const TSharedRef<FJsonObject>
JsonObject = JsonObject::UStructToJsonObject<T>(Elem);
70 JsonValues.Add(MakeShared<FJsonValueObject>(
JsonObject));
72 Inner.Add(Field, MakeShared<FJsonValueArray>(JsonValues));
76TOptional<T> FAdditionalFields::GetNumber(
const FName& Field)
const
78 if (
const TSharedPtr<FJsonValue>* JsonValue = Inner.Find(Field))
81 if (JsonValue->Get()->TryGetNumber(OutNumber))
90TOptional<T> FAdditionalFields::Get(
const FName& Field)
const
92 if (
const TSharedPtr<FJsonValue>* JsonValue = Inner.Find(Field))
94 const TSharedPtr<FJsonObject>* OutObject;
95 if (JsonValue->Get()->TryGetObject(OutObject))
108TOptional<FDateTime> STREAMJSON_API FAdditionalFields::Get(
const FName& Field)
const;
110void STREAMJSON_API FAdditionalFields::Set(
const FName& Field,
const FDateTime&);
122 UFUNCTION(BlueprintPure, Category =
"Stream Chat|Additional Fields")
123 static void SetString(UPARAM(ref) FAdditionalFields& AdditionalFields, FName Field,
const FString& Value, FAdditionalFields& Out);
124 UFUNCTION(BlueprintPure, Category =
"Stream Chat|Additional Fields")
125 static void SetFloat(UPARAM(ref) FAdditionalFields& AdditionalFields, FName Field,
float Value, FAdditionalFields& Out);
126 UFUNCTION(BlueprintPure, Category =
"Stream Chat|Additional Fields")
127 static void SetInt(UPARAM(ref) FAdditionalFields& AdditionalFields, FName Field, int32 Value, FAdditionalFields& Out);
128 UFUNCTION(BlueprintPure, Category =
"Stream Chat|Additional Fields")
129 static void SetBool(UPARAM(ref) FAdditionalFields& AdditionalFields, FName Field,
bool bValue, FAdditionalFields& Out);
131 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Additional Fields", meta = (ReturnDisplayName = Success))
132 static bool GetString(
const FAdditionalFields& AdditionalFields, FName Field, FString& Result);
133 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Additional Fields", meta = (ReturnDisplayName = Success))
134 static bool GetFloat(
const FAdditionalFields& AdditionalFields, FName Field,
float& Result);
135 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Additional Fields", meta = (ReturnDisplayName = Success))
136 static bool GetInt(
const FAdditionalFields& AdditionalFields, FName Field, int32& Result);
137 UFUNCTION(BlueprintCallable, Category =
"Stream Chat|Additional Fields", meta = (ReturnDisplayName = Success))
138 static bool GetBool(
const FAdditionalFields& AdditionalFields, FName Field,
bool& Result);
Blueprint functions for the Additional Fields struct.
Definition: AdditionalFields.h:118
STREAMJSON_API bool JsonObjectToUStruct(const TSharedRef< FJsonObject > &JsonObject, const UStruct *StructDefinition, void *OutStruct)
Converts from a Json Object to a UStruct, using importText.
Definition: JsonObjectDeserialization.cpp:695
Conversion to and from dynamic JSON objects.
Definition: StreamJson.h:16