#include "Telemetry/TelemetryEvent.h" #include "Serialization/JsonSerializer.h" #include "Serialization/JsonWriter.h" #include "Policies/CondensedJsonPrintPolicy.h" FString Telemetry::ToJsonLine(const FTelemetryEnvelope& Envelope, const FTelemetryEvent& Event) { TSharedRef Root = MakeShared(); Root->SetNumberField(TEXT("schema_version"), Envelope.SchemaVersion); Root->SetStringField(TEXT("event_id"), Envelope.EventId.ToString(EGuidFormats::DigitsWithHyphensLower)); Root->SetStringField(TEXT("timestamp_utc"), Envelope.TimestampUtc.ToIso8601()); Root->SetNumberField(TEXT("game_time"), Envelope.GameTime); Root->SetStringField(TEXT("session_id"), Envelope.SessionId.ToString(EGuidFormats::DigitsWithHyphensLower)); Root->SetStringField(TEXT("player_id"), Envelope.PlayerId); Root->SetBoolField(TEXT("is_server"), Envelope.bIsServer); Root->SetNumberField(TEXT("party_size"), Envelope.PartySize); Root->SetStringField(TEXT("build"), Envelope.Build); Root->SetStringField(TEXT("map"), Envelope.Map); Root->SetBoolField(TEXT("cheats_used"), Envelope.bCheatsUsed); Root->SetStringField(TEXT("name"), Event.Name.ToString()); Root->SetObjectField(TEXT("payload"), Event.Payload.IsValid() ? Event.Payload : MakeShared()); FString Line; TSharedRef>> Writer = TJsonWriterFactory>::Create(&Line); FJsonSerializer::Serialize(Root, Writer); return Line; }