Skip to content

Commit

Permalink
Make BasicProperties a class
Browse files Browse the repository at this point in the history
Follow-up to #1607

As suggested by @bollhals
  • Loading branch information
lukebakken committed Jun 21, 2024
1 parent 7781e4e commit cc1a969
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 21 deletions.
2 changes: 1 addition & 1 deletion projects/RabbitMQ.Client/PublicAPI.Shipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ RabbitMQ.Client.BasicProperties
RabbitMQ.Client.BasicProperties.AppId.get -> string
RabbitMQ.Client.BasicProperties.AppId.set -> void
RabbitMQ.Client.BasicProperties.BasicProperties() -> void
RabbitMQ.Client.BasicProperties.BasicProperties(in RabbitMQ.Client.ReadOnlyBasicProperties input) -> void
RabbitMQ.Client.BasicProperties.BasicProperties(RabbitMQ.Client.ReadOnlyBasicProperties input) -> void
RabbitMQ.Client.BasicProperties.ClearAppId() -> void
RabbitMQ.Client.BasicProperties.ClearClusterId() -> void
RabbitMQ.Client.BasicProperties.ClearContentEncoding() -> void
Expand Down
1 change: 1 addition & 0 deletions projects/RabbitMQ.Client/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
RabbitMQ.Client.BasicProperties.BasicProperties(RabbitMQ.Client.ReadOnlyBasicProperties! input) -> void
44 changes: 24 additions & 20 deletions projects/RabbitMQ.Client/client/api/BasicProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ namespace RabbitMQ.Client
/// <summary>
/// AMQP specification content header properties for content class "basic".
/// </summary>
public struct BasicProperties : IBasicProperties, IAmqpHeader
public sealed class BasicProperties : IBasicProperties, IAmqpHeader
{
public string? ContentType { get; set; }
public string? ContentEncoding { get; set; }
Expand All @@ -59,7 +59,7 @@ public struct BasicProperties : IBasicProperties, IAmqpHeader

public bool Persistent
{
readonly get
get
{
return DeliveryMode == DeliveryModes.Persistent;
}
Expand All @@ -72,7 +72,7 @@ readonly get

public PublicationAddress? ReplyToAddress
{
readonly get
get
{
PublicationAddress.TryParse(ReplyTo, out PublicationAddress result);
return result;
Expand All @@ -81,7 +81,11 @@ readonly get
set { ReplyTo = value?.ToString(); }
}

public BasicProperties(in ReadOnlyBasicProperties input)
public BasicProperties()
{
}

public BasicProperties(ReadOnlyBasicProperties input)
{
ContentType = input.ContentType;
ContentEncoding = input.ContentEncoding;
Expand Down Expand Up @@ -114,20 +118,20 @@ public BasicProperties(in ReadOnlyBasicProperties input)
public void ClearAppId() => AppId = default;
public void ClearClusterId() => ClusterId = default;

public readonly bool IsContentTypePresent() => ContentType != default;
public readonly bool IsContentEncodingPresent() => ContentEncoding != default;
public readonly bool IsHeadersPresent() => Headers != default;
public readonly bool IsDeliveryModePresent() => DeliveryMode != default;
public readonly bool IsPriorityPresent() => Priority != default;
public readonly bool IsCorrelationIdPresent() => CorrelationId != default;
public readonly bool IsReplyToPresent() => ReplyTo != default;
public readonly bool IsExpirationPresent() => Expiration != default;
public readonly bool IsMessageIdPresent() => MessageId != default;
public readonly bool IsTimestampPresent() => Timestamp != default;
public readonly bool IsTypePresent() => Type != default;
public readonly bool IsUserIdPresent() => UserId != default;
public readonly bool IsAppIdPresent() => AppId != default;
public readonly bool IsClusterIdPresent() => ClusterId != default;
public bool IsContentTypePresent() => ContentType != default;
public bool IsContentEncodingPresent() => ContentEncoding != default;
public bool IsHeadersPresent() => Headers != default;
public bool IsDeliveryModePresent() => DeliveryMode != default;
public bool IsPriorityPresent() => Priority != default;
public bool IsCorrelationIdPresent() => CorrelationId != default;
public bool IsReplyToPresent() => ReplyTo != default;
public bool IsExpirationPresent() => Expiration != default;
public bool IsMessageIdPresent() => MessageId != default;
public bool IsTimestampPresent() => Timestamp != default;
public bool IsTypePresent() => Type != default;
public bool IsUserIdPresent() => UserId != default;
public bool IsAppIdPresent() => AppId != default;
public bool IsClusterIdPresent() => ClusterId != default;

ushort IAmqpHeader.ProtocolClassId => ClassConstants.Basic;

Expand All @@ -153,7 +157,7 @@ public BasicProperties(in ReadOnlyBasicProperties input)
internal const byte AppIdBit = 3;
internal const byte ClusterIdBit = 2;

readonly int IAmqpWriteable.WriteTo(Span<byte> span)
int IAmqpWriteable.WriteTo(Span<byte> span)
{
int offset = 2;
ref byte bitValue = ref span.GetStart();
Expand Down Expand Up @@ -247,7 +251,7 @@ readonly int IAmqpWriteable.WriteTo(Span<byte> span)
return offset;
}

readonly int IAmqpWriteable.GetRequiredBufferSize()
int IAmqpWriteable.GetRequiredBufferSize()
{
int bufferSize = 2; // number of presence fields (14) in 2 bytes blocks
if (IsContentTypePresent()) { bufferSize += 1 + WireFormatting.GetByteCount(ContentType); } // _contentType in bytes
Expand Down

0 comments on commit cc1a969

Please sign in to comment.