UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RapidJsonPluginLoading.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8
15struct FPluginManifest;
16
17namespace UE {
18namespace Projects {
19namespace Private {
20
26bool TryGetBoolField(Json::FConstObject Object, const TCHAR* FieldName, bool& Out);
27bool TryGetNumberField(Json::FConstObject Object, const TCHAR* FieldName, int32& Out);
28bool TryGetNumberField(Json::FConstObject Object, const TCHAR* FieldName, uint32& Out);
29bool TryGetStringField(Json::FConstObject Object, const TCHAR* FieldName, FString& Out);
30bool TryGetStringField(Json::FConstObject Object, const TCHAR* FieldName, FStringView& Out);
31bool TryGetStringArrayField(Json::FConstObject Object, const TCHAR* FieldName, TArray<FString>& Out);
32bool TryGetStringArrayField(Json::FConstObject Object, const TCHAR* FieldName, TArray<FName>& Out);
33
35
38
39
41template<typename TEnum>
43{
45 if (!Array.IsSet())
46 {
47 return false;
48 }
49
50 OutArray.Reset(Array->Size());
51 for (const Json::FValue& JsonValue : *Array)
52 {
53 if (!JsonValue.IsString())
54 {
55 continue;
56 }
57
59 if (LexTryParseString(Value, JsonValue.GetString()))
60 {
61 OutArray.Add(Value);
62 }
63 }
64 return true;
65}
66
67template<typename TEnum>
69{
70 if (TryGetEnumArrayField<TEnum>(Object, FieldName, /*out*/ OutArray))
71 {
72 return true;
73 }
75 {
76 //@TODO: Warn about deprecated field fallback?
77 return true;
78 }
79 else
80 {
81 return false;
82 }
83}
84
85// A private interface as to not expose RapidJson types
86
93
95
96// Helper functions to convert and call the rapidjson functions from default json sources
97template<typename FUNCTOR>
98bool ReadFromDefaultJsonHelper(const FJsonObject& Object, FUNCTOR && Functor)
99{
101 if (!Document.IsSet())
102 {
103 return false;
104 }
105
107 if (!RootObject.IsSet())
108 {
109 return false;
110 }
111
112 return Functor(*RootObject);
113}
114
115template<typename TYPE>
117{
119 Object,
120 [&Out, OutFailReason](Json::FConstObject RootObject)
121 {
122 TOptional<FText> ResultError = Read(RootObject, Out);
123 if (ResultError)
124 {
125 if (OutFailReason)
126 {
128 }
129
130 return false;
131 }
132
133 return true;
134 }
135 );
136}
137
138template<typename TYPE>
140{
141 TOptional<Json::FConstArray> ArrayValue = Json::GetArrayField(Object, FieldName);
142 if(ArrayValue.IsSet())
143 {
144 OutArray.Reserve(ArrayValue->Size());
145
146 for (const Json::FValue& ArrayItem : *ArrayValue)
147 {
148 if (ArrayItem.IsObject())
149 {
150 TOptional<FText> EntryResult = Read(ArrayItem.GetObject(), OutArray.Emplace_GetRef());
151 if (EntryResult.IsSet())
152 {
153 OutArray.Pop();
154 return GetArrayObjectChildParseError(FieldName, OutArray.Num(), *EntryResult);
155 }
156 }
157 else
158 {
159 return GetArrayObjectTypeError(FieldName, OutArray.Num());
160 }
161 }
162 }
163
164 return {};
165}
166
167template<typename TYPE>
169{
171 Object,
172 [Name, &OutArray, OutFailReason](Json::FConstObject RootObject)
173 {
175 if (ArrayError)
176 {
177 if (OutFailReason)
178 {
180 }
181
182 return false;
183 }
184
185 return true;
186 }
187 );
188}
189
190}
191}
192}
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
bool LexTryParseString(EBuildConfiguration &OutConfiguration, const TCHAR *Configuration)
Definition GenericPlatformMisc.cpp:270
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition JsonObject.h:23
Definition Text.h:385
Definition Array.h:670
Definition OverriddenPropertySet.cpp:45
TOptional< FDocument > ConvertSharedJsonToRapidJsonDocument(const FJsonObject &SrcObject)
Definition JsonConversion.cpp:208
TOptional< FConstArray > GetArrayField(FConstObject Object, const TCHAR *FieldName)
Definition RapidJsonUtils.cpp:121
TOptional< FConstObject > GetRootObject(const FDocument &Document)
Definition RapidJsonUtils.cpp:111
FDocument::ValueType FValue
Definition RapidJsonUtils.h:61
FValue::ConstObject FConstObject
Definition RapidJsonUtils.h:65
bool TryGetBoolField(Json::FConstObject Object, const TCHAR *FieldName, bool &Out)
Definition RapidJsonPluginLoading.cpp:14
TOptional< FText > ReadArray(Json::FConstObject Object, const TCHAR *FieldName, TArray< TYPE > &OutArray)
Definition RapidJsonPluginLoading.h:139
FText GetArrayObjectChildParseError(const TCHAR *FieldName, int32 Index, const FText &PropagateError)
Definition RapidJsonPluginLoading.cpp:292
bool TryGetEnumArrayFieldWithDeprecatedFallback(Json::FConstObject Object, const TCHAR *FieldName, const TCHAR *DeprecatedFieldName, TArray< TEnum > &OutArray)
Definition RapidJsonPluginLoading.h:68
FText GetArrayObjectTypeError(const TCHAR *FieldName, int32 Index)
Definition RapidJsonPluginLoading.cpp:286
FCustomBuildSteps ReadCustomBuildSteps(Json::FConstObject Object, const TCHAR *FieldName)
Definition CustomBuildSteps.cpp:16
bool ReadFromDefaultJson(const FJsonObject &Object, TYPE &Out, FText *OutFailReason)
Definition RapidJsonPluginLoading.h:116
bool ReadFromDefaultJsonHelper(const FJsonObject &Object, FUNCTOR &&Functor)
Definition RapidJsonPluginLoading.h:98
bool TryGetNumberField(Json::FConstObject Object, const TCHAR *FieldName, int32 &Out)
Definition RapidJsonPluginLoading.cpp:161
bool ReadArrayFromDefaultJson(const FJsonObject &Object, const TCHAR *Name, TArray< TYPE > &OutArray, FText *OutFailReason)
Definition RapidJsonPluginLoading.h:168
bool TryGetEnumArrayField(Json::FConstObject Object, const TCHAR *FieldName, TArray< TEnum > &OutArray)
Definition RapidJsonPluginLoading.h:42
bool TryGetStringArrayField(Json::FConstObject Object, const TCHAR *FieldName, TArray< FString > &Out)
Definition RapidJsonPluginLoading.cpp:218
bool TryGetStringArrayFieldWithDeprecatedFallback(Json::FConstObject Object, const TCHAR *FieldName, const TCHAR *DeprecatedFieldName, TArray< FString > &OutArray)
Definition RapidJsonPluginLoading.cpp:276
bool TryGetStringField(Json::FConstObject Object, const TCHAR *FieldName, FString &Out)
Definition RapidJsonPluginLoading.cpp:200
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition CustomBuildSteps.h:17
Definition LocalizationDescriptor.h:91
Definition ModuleDescriptor.h:155
Definition PluginDescriptor.h:39
Definition PluginDisallowedDescriptor.h:15
Definition PluginManifest.h:29
Definition PluginReferenceDescriptor.h:27
Definition Optional.h:131
constexpr bool IsSet() const
Definition Optional.h:69