in src/Proton/Codec/Encoders/Transport/FlowTypeEncoder.cs [53:167]
protected override void WriteElement(Flow flow, int index, IProtonBuffer buffer, IEncoderState state)
{
// When encoding ensure that values that were never set are omitted and a simple
// NULL entry is written in the slot instead (don't write defaults).
buffer.EnsureWritable(sizeof(int));
switch (index)
{
case 0:
if (flow.HasNextIncomingId())
{
state.Encoder.WriteUnsignedInteger(buffer, state, flow.NextIncomingId);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 1:
if (flow.HasIncomingWindow())
{
state.Encoder.WriteUnsignedInteger(buffer, state, flow.IncomingWindow);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 2:
if (flow.HasNextOutgoingId())
{
state.Encoder.WriteUnsignedInteger(buffer, state, flow.NextOutgoingId);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 3:
if (flow.HasOutgoingWindow())
{
state.Encoder.WriteUnsignedInteger(buffer, state, flow.OutgoingWindow);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 4:
if (flow.HasHandle())
{
state.Encoder.WriteUnsignedInteger(buffer, state, flow.Handle);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 5:
if (flow.HasDeliveryCount())
{
state.Encoder.WriteUnsignedInteger(buffer, state, flow.DeliveryCount);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 6:
if (flow.HasLinkCredit())
{
state.Encoder.WriteUnsignedInteger(buffer, state, flow.LinkCredit);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 7:
if (flow.HasAvailable())
{
state.Encoder.WriteUnsignedInteger(buffer, state, flow.Available);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 8:
if (flow.HasDrain())
{
buffer.WriteUnsignedByte((byte)(flow.Drain ? EncodingCodes.BooleanTrue : EncodingCodes.BooleanFalse));
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 9:
if (flow.HasEcho())
{
buffer.WriteUnsignedByte((byte)(flow.Echo ? EncodingCodes.BooleanTrue : EncodingCodes.BooleanFalse));
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 10:
state.Encoder.WriteMap(buffer, state, flow.Properties);
break;
default:
throw new ArgumentOutOfRangeException("Unknown Flow value index: " + index);
}
}