// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/ArrayView.h" #include "Containers/StringConv.h" #include "Misc/StringBuilder.h" #include "PlainPropsPrint.h" #include "Templates/UniquePtr.h" namespace PlainProps { class FYamlBuilder; struct FSchemaBatch; struct FEnumSchema; struct FStructSchema; inline TStringBuilderWithBuffer Print(FUtf8StringView View) { return WriteToString<128>(FStringView(StringCast(View.GetData(), View.Len()))); } /////////////////////////////////////////////////////////////////////////////// struct FYamlBuilderDeleter { PLAINPROPS_API void operator()(FYamlBuilder* Ptr) const; }; using FYamlBuilderPtr = TUniquePtr; [[nodiscard]] FYamlBuilderPtr MakeYamlBuilder(FUtf8StringBuilderBase& StringBuilder); /////////////////////////////////////////////////////////////////////////////// class FBatchPrinter { public: FBatchPrinter(FYamlBuilder& InTextBuilder, const FBatchIds& InIds); ~FBatchPrinter(); void PrintSchemas(); void PrintObjects(TConstArrayView Structs); private: void PrintStructSchema(const FStructSchema& Struct, FSchemaBatchId BatchId); void PrintEnumSchema(const FEnumSchema& Enum); template void PrintEnumConstants(TConstArrayView EnumNames, TConstArrayView Constants, bool bFlagMode); FYamlBuilder& TextBuilder; const FBatchIds& Ids; }; /////////////////////////////////////////////////////////////////////////////// } // namespace PlainProps