in src/Proton/Codec/Encoders/Messaging/HeaderTypeEncoder.cs [41:103]
protected override void WriteElement(Header header, 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(long));
switch (index)
{
case 0:
if (header.HasDurable())
{
buffer.WriteUnsignedByte((byte)(header.Durable ? EncodingCodes.BooleanTrue : EncodingCodes.BooleanFalse));
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 1:
if (header.HasPriority())
{
state.Encoder.WriteUnsignedByte(buffer, state, header.Priority);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 2:
if (header.HasTimeToLive())
{
state.Encoder.WriteUnsignedInteger(buffer, state, header.TimeToLive);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 3:
if (header.HasFirstAcquirer())
{
buffer.WriteUnsignedByte((byte)(header.FirstAcquirer ? EncodingCodes.BooleanTrue : EncodingCodes.BooleanFalse));
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
case 4:
if (header.HasDeliveryCount())
{
state.Encoder.WriteUnsignedInteger(buffer, state, header.DeliveryCount);
}
else
{
buffer.WriteUnsignedByte((byte)EncodingCodes.Null);
}
break;
default:
throw new ArgumentOutOfRangeException("Unknown Header value index: " + index);
}
}