// Copyright Epic Games, Inc. All Rights Reserved. #include "CustomBuildSteps.h" #include "Dom/JsonObject.h" #include "Serialization/JsonSerializer.h" #define LOCTEXT_NAMESPACE "ModuleDescriptor" bool FCustomBuildSteps::IsEmpty() const { return HostPlatformToCommands.Num() == 0; } void FCustomBuildSteps::Read(const FJsonObject& Object, const FString& FieldName) { TSharedPtr StepsValue = Object.TryGetField(FieldName); if(StepsValue.IsValid() && StepsValue->Type == EJson::Object) { const TSharedPtr& StepsObject = StepsValue->AsObject(); for(const TPair>& HostPlatformAndSteps : StepsObject->Values) { TArray& Commands = HostPlatformToCommands.FindOrAdd(HostPlatformAndSteps.Key); if(HostPlatformAndSteps.Value.IsValid() && HostPlatformAndSteps.Value->Type == EJson::Array) { const TArray>& CommandsArray = HostPlatformAndSteps.Value->AsArray(); for(const TSharedPtr& CommandValue: CommandsArray) { if(CommandValue->Type == EJson::String) { Commands.Add(CommandValue->AsString()); } } } } } } void FCustomBuildSteps::Write(TJsonWriter<>& Writer, const FString& FieldName) const { if (!IsEmpty()) { TSharedRef JsonObject = MakeShared(); UpdateJson(*JsonObject, FieldName); if (TSharedPtr StepsValue = JsonObject->TryGetField(FieldName)) { FJsonSerializer::Serialize(StepsValue, FieldName, Writer); } } } void FCustomBuildSteps::UpdateJson(FJsonObject& JsonObject, const FString& FieldName) const { if (!IsEmpty()) { TSharedPtr StepsObject; { const TSharedPtr* StepsObjectPtr = nullptr; if (JsonObject.TryGetObjectField(FieldName, StepsObjectPtr) && StepsObjectPtr) { StepsObject = *StepsObjectPtr; } else { StepsObject = MakeShared(); JsonObject.SetObjectField(FieldName, StepsObject); } } if (ensure(StepsObject.IsValid())) { for (const TPair>& HostPlatformAndCommands : HostPlatformToCommands) { TArray> CommandValues; for (const FString& Command : HostPlatformAndCommands.Value) { CommandValues.Add(MakeShareable(new FJsonValueString(Command))); } StepsObject->SetArrayField(HostPlatformAndCommands.Key, CommandValues); } } } else { JsonObject.RemoveField(FieldName); } } #undef LOCTEXT_NAMESPACE