Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make BasicProperties a class #1609

Merged
merged 1 commit into from
Jun 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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