Stream Chat Unreal SDK
Loading...
Searching...
No Matches
StreamJson.h
1// Copyright 2022 Stream.IO, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Detail/JsonObjectDeserialization.h"
7#include "Detail/JsonObjectSerialization.h"
8#include "NamingConvention.h"
9#include "UObject/ReflectedTypeAccessors.h"
10
15namespace JsonObject
16{
25STREAMJSON_API TSharedRef<FJsonObject> UStructToJsonObject(
26 const UStruct* StructDefinition,
27 const void* Struct,
28 ENamingConvention NamingConvention = ENamingConvention::SnakeCase);
29
37template <class T>
38TSharedRef<FJsonObject> UStructToJsonObject(const T& Struct, ENamingConvention NamingConvention = ENamingConvention::SnakeCase)
39{
40 const TSharedRef<FJsonObject> JsonObject = JsonObject::UStructToJsonObject(T::StaticStruct(), &Struct, NamingConvention);
41 return JsonObject;
42}
43
44FString STREAMJSON_API JsonObjectToString(const TSharedRef<FJsonObject>& JsonObject);
45} // namespace JsonObject
46
47namespace Json
48{
49template <class T>
50typename TEnableIf<TIsClass<T>::Value, FString>::Type Serialize(const T& Struct, const ENamingConvention NamingConvention = ENamingConvention::SnakeCase)
51{
52 const TSharedRef<FJsonObject> JsonObject = JsonObject::UStructToJsonObject<T>(Struct, NamingConvention);
53
54 return JsonObject::JsonObjectToString(JsonObject);
55}
56
57template <class T>
58typename TEnableIf<TIsEnumClass<T>::Value, FString>::Type Serialize(const T& Enum, const ENamingConvention NamingConvention = ENamingConvention::SnakeCase)
59{
60 return JsonObjectSerialization::UEnumToString(StaticEnum<T>(), static_cast<int64>(Enum), NamingConvention);
61}
62
63template <class T>
64T Deserialize(const FString& Json)
65{
66 T OutData;
67 JsonObjectDeserialization::JsonObjectStringToUStruct<T>(Json, &OutData);
68 return OutData;
69}
70} // namespace Json
@ Type
Type of the message.
Conversion to and from dynamic JSON objects.
Definition: StreamJson.h:16
STREAMJSON_API TSharedRef< FJsonObject > UStructToJsonObject(const UStruct *StructDefinition, const void *Struct, ENamingConvention NamingConvention=ENamingConvention::SnakeCase)
Converts from a UStruct to a Json Object.
Definition: StreamJson.cpp:8