Files
UnrealEngine/Engine/Source/Runtime/Experimental/JsonObjectGraph/Private/PrettyJsonWriter.h
2025-05-18 13:04:45 +08:00

60 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Serialization/JsonWriter.h"
namespace UE::Private
{
struct TPrettyJsonPrintPolicySingleNewLine
: public TPrettyJsonPrintPolicy<UTF8CHAR>
{
static inline void WriteLineTerminator(FArchive* Stream)
{
TJsonPrintPolicy<UTF8CHAR>::WriteString(Stream, FStringView(TEXT("\n")));
}
};
// Extending TJsonWriter to get some control over whitespace and tabbing:
struct FPrettyJsonWriter : public TJsonWriter<UTF8CHAR, TPrettyJsonPrintPolicySingleNewLine>
{
using Super = TJsonWriter<UTF8CHAR, TPrettyJsonPrintPolicySingleNewLine>;
using PrintPolicy = TPrettyJsonPrintPolicySingleNewLine;
using CharType = UTF8CHAR;
FPrettyJsonWriter(FArchive* const InStream, int32 InitialIndentLevel);
static TSharedRef<FPrettyJsonWriter> Create(FArchive* const InStream, int32 InitialIndent = 0);
// useful for composing blocks of json
void WriteJsonRaw(FAnsiStringView Value);
void WriteValueInline(FText Value);
void WriteValueInline(const FString& Value);
void WriteValueInline(FAnsiStringView UTF8Value);
void WriteValueInline(FUtf8StringView UTF8Value);
void WriteValueInline(int16 Value);
void WriteValueInline(uint16 Value);
void WriteValueInline(uint32 Value);
template<typename T>
void WriteValueInline(T Value)
{
check(CanWriteValueWithoutIdentifier());
WriteCommaAndNewlineIfNeeded();
PreviousTokenWritten = WriteValueOnly(Value);
}
void WriteUtf8Value(FStringView Identifier, FUtf8StringView UTF8Value);
void WriteObjectStartInline();
void WriteArrayStartInline();
void WriteNewlineAndArrayEnd();
void WriteLineTerminator();
void HACK_SetPreviousTokenWritten();
void HACK_SetPreviousTokenWrittenSquareClose();
void WriteCommaAndNewlineIfNeeded();
};
}