public void WriteField <TBufferWriter>(ref Writer <TBufferWriter> writer, uint fieldIdDelta, Type expectedType, ReadOnlyMemory <T> value) where TBufferWriter : IBufferWriter <byte> { if (ReferenceCodec.TryWriteReferenceField(ref writer, fieldIdDelta, expectedType, value)) { return; } writer.WriteFieldHeader(fieldIdDelta, expectedType, value.GetType(), WireType.TagDelimited); Int32Codec.WriteField(ref writer, 0, typeof(int), value.Length); var first = true; foreach (var element in value.Span) { _fieldCodec.WriteField(ref writer, first ? 1U : 0, typeof(T), element); first = false; } writer.WriteEndObject(); }
public void WriteField <TBufferWriter>(ref Writer <TBufferWriter> writer, uint fieldIdDelta, Type expectedType, ReadOnlyMemory <T> value) where TBufferWriter : IBufferWriter <byte> { if (ReferenceCodec.TryWriteReferenceField(ref writer, fieldIdDelta, expectedType, value)) { return; } writer.WriteFieldHeader(fieldIdDelta, expectedType, value.GetType(), WireType.TagDelimited); Int32Codec.WriteField(ref writer, 0, Int32Codec.CodecFieldType, value.Length); uint innerFieldIdDelta = 1; foreach (var element in value.Span) { _fieldCodec.WriteField(ref writer, innerFieldIdDelta, CodecElementType, element); innerFieldIdDelta = 0; } writer.WriteEndObject(); }
public static Task ExecutePipelineAsync(IClientPipeContext context, ReadOnlyMemory <IClientPipe> pipeline) { var pipe = pipeline.Span[0]; if (pipe is IGenericClientPipe genericPipe) { return(genericPipe.ProcessAsync(context, pipeline.Slice(1))); } if (context is ClientPipeContextAction contextAction && pipe is IActionClientPipe actionPipe) { return(actionPipe.ProcessAsync(contextAction, pipeline.Slice(1))); } if (context is ClientPipeContextMessage contextMessage && pipe is IMessageClientPipe messagePipe) { return(messagePipe.ProcessAsync(contextMessage, pipeline.Slice(1))); } throw new RabbitMqPipeException($"Unsupported message of type {context.GetType()} for pipe {pipeline.GetType()}"); }