in src/Elastic.Ingest.Elasticsearch/Serialization/BulkRequestDataFactory.cs [34:71]
public static ReadOnlyMemory<byte> GetBytes<TEvent>(ArraySegment<TEvent> page,
ElasticsearchChannelOptionsBase<TEvent> options, Func<TEvent, BulkOperationHeader> createHeaderFactory)
{
// ArrayBufferWriter inserts comma's when serializing multiple times
// Hence the multiple writer.Resets() as advised on this feature request
// https://github.com/dotnet/runtime/issues/82314
var bufferWriter = new ArrayBufferWriter<byte>();
using var writer = new Utf8JsonWriter(bufferWriter, WriterOptions);
foreach (var @event in page.AsSpan())
{
var indexHeader = createHeaderFactory(@event);
JsonSerializer.Serialize(writer, indexHeader, indexHeader.GetType(), SerializerOptions);
bufferWriter.Write(LineFeed);
writer.Reset();
if (indexHeader is UpdateOperation)
{
bufferWriter.Write(DocUpdateHeaderStart);
writer.Reset();
}
if (options.EventWriter?.WriteToArrayBuffer != null)
options.EventWriter.WriteToArrayBuffer(bufferWriter, @event);
else
JsonSerializer.Serialize(writer, @event, SerializerOptions);
writer.Reset();
if (indexHeader is UpdateOperation)
{
bufferWriter.Write(DocUpdateHeaderEnd);
writer.Reset();
}
bufferWriter.Write(LineFeed);
writer.Reset();
}
return bufferWriter.WrittenMemory;
}