Example #1
0
        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();
        }
Example #2
0
        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()}");
        }