public static ReadOnlyMemory GetBytes()

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;
	}