Skip to content

Commit d4490e2

Browse files
committed
* IComparable for AmqpString
* Replace more use of `string` with `QueueName`
1 parent 4b558b0 commit d4490e2

File tree

7 files changed

+45
-28
lines changed

7 files changed

+45
-28
lines changed

projects/RabbitMQ.Client/PublicAPI.Unshipped.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,6 @@ RabbitMQ.Client.Events.EventingBasicConsumer.Unregistered -> System.EventHandler
314314
RabbitMQ.Client.Events.FlowControlEventArgs
315315
RabbitMQ.Client.Events.FlowControlEventArgs.FlowControlEventArgs(bool active) -> void
316316
RabbitMQ.Client.Events.QueueNameChangedAfterRecoveryEventArgs
317-
RabbitMQ.Client.Events.QueueNameChangedAfterRecoveryEventArgs.QueueNameChangedAfterRecoveryEventArgs(string nameBefore, string nameAfter) -> void
318317
RabbitMQ.Client.Events.RecoveringConsumerEventArgs
319318
RabbitMQ.Client.Events.RecoveringConsumerEventArgs.ConsumerArguments.get -> System.Collections.Generic.IDictionary<string, object>
320319
RabbitMQ.Client.Events.RecoveringConsumerEventArgs.ConsumerTag.get -> string
@@ -814,8 +813,6 @@ readonly RabbitMQ.Client.Events.ConsumerEventArgs.ConsumerTags -> string[]
814813
readonly RabbitMQ.Client.Events.ConsumerTagChangedAfterRecoveryEventArgs.TagAfter -> string
815814
readonly RabbitMQ.Client.Events.ConsumerTagChangedAfterRecoveryEventArgs.TagBefore -> string
816815
readonly RabbitMQ.Client.Events.FlowControlEventArgs.Active -> bool
817-
readonly RabbitMQ.Client.Events.QueueNameChangedAfterRecoveryEventArgs.NameAfter -> string
818-
readonly RabbitMQ.Client.Events.QueueNameChangedAfterRecoveryEventArgs.NameBefore -> string
819816
readonly RabbitMQ.Client.Exceptions.HardProtocolException._canShutdownCleanly -> bool
820817
readonly RabbitMQ.Client.QueueDeclareOk.ConsumerCount -> uint
821818
readonly RabbitMQ.Client.QueueDeclareOk.MessageCount -> uint
@@ -878,6 +875,7 @@ virtual RabbitMQ.Client.TcpClientAdapter.ReceiveTimeout.set -> void
878875
~override RabbitMQ.Client.ExchangeType.ToString() -> string
879876
~RabbitMQ.Client.AmqpString.AmqpString(string value, ushort maxLen, System.Text.Encoding encoding) -> void
880877
~RabbitMQ.Client.AmqpString.AmqpString(string value, ushort maxLen, System.Text.Encoding encoding, string validatorRegex) -> void
878+
~RabbitMQ.Client.AmqpString.CompareTo(RabbitMQ.Client.AmqpString other) -> int
881879
~RabbitMQ.Client.AmqpString.Contains(string value) -> bool
882880
~RabbitMQ.Client.AmqpString.Equals(RabbitMQ.Client.AmqpString other) -> bool
883881
~RabbitMQ.Client.AmqpTcpEndpoint.AmqpTcpEndpoint(string hostName, int portOrMinusOne, RabbitMQ.Client.SslOption ssl, uint maxInboundMessageBodySize) -> void
@@ -890,6 +888,7 @@ virtual RabbitMQ.Client.TcpClientAdapter.ReceiveTimeout.set -> void
890888
~RabbitMQ.Client.ConnectionFactory.CreateConnectionAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<RabbitMQ.Client.IConnection>
891889
~RabbitMQ.Client.ConsumerTag.ConsumerTag(string exchangeName) -> void
892890
~RabbitMQ.Client.Events.BasicDeliverEventArgs.BasicDeliverEventArgs(string consumerTag, ulong deliveryTag, bool redelivered, System.ReadOnlyMemory<byte> exchange, System.ReadOnlyMemory<byte> routingKey, in RabbitMQ.Client.ReadOnlyBasicProperties properties, System.ReadOnlyMemory<byte> body) -> void
891+
~RabbitMQ.Client.Events.QueueNameChangedAfterRecoveryEventArgs.QueueNameChangedAfterRecoveryEventArgs(RabbitMQ.Client.QueueName nameBefore, RabbitMQ.Client.QueueName nameAfter) -> void
893892
~RabbitMQ.Client.ExchangeName.ExchangeName(string exchangeName) -> void
894893
~RabbitMQ.Client.ExchangeType.Equals(RabbitMQ.Client.ExchangeType other) -> bool
895894
~RabbitMQ.Client.IAsyncBasicConsumer.HandleBasicDeliver(string consumerTag, ulong deliveryTag, bool redelivered, System.ReadOnlyMemory<byte> exchange, System.ReadOnlyMemory<byte> routingKey, in RabbitMQ.Client.ReadOnlyBasicProperties properties, System.ReadOnlyMemory<byte> body) -> System.Threading.Tasks.Task
@@ -943,14 +942,16 @@ virtual RabbitMQ.Client.TcpClientAdapter.ReceiveTimeout.set -> void
943942
~RabbitMQ.Client.TopologyRecoveryExceptionHandler.ExchangeRecoveryExceptionHandlerAsync.set -> void
944943
~RabbitMQ.Client.TopologyRecoveryExceptionHandler.QueueRecoveryExceptionHandlerAsync.get -> System.Func<RabbitMQ.Client.IRecordedQueue, System.Exception, RabbitMQ.Client.IConnection, System.Threading.Tasks.Task>
945944
~RabbitMQ.Client.TopologyRecoveryExceptionHandler.QueueRecoveryExceptionHandlerAsync.set -> void
945+
~readonly RabbitMQ.Client.Events.QueueNameChangedAfterRecoveryEventArgs.NameAfter -> RabbitMQ.Client.QueueName
946+
~readonly RabbitMQ.Client.Events.QueueNameChangedAfterRecoveryEventArgs.NameBefore -> RabbitMQ.Client.QueueName
946947
~readonly RabbitMQ.Client.PublicationAddress.ExchangeName -> RabbitMQ.Client.ExchangeName
947948
~readonly RabbitMQ.Client.PublicationAddress.ExchangeType -> RabbitMQ.Client.ExchangeType
948949
~readonly RabbitMQ.Client.PublicationAddress.RoutingKey -> RabbitMQ.Client.RoutingKey
949950
~static RabbitMQ.Client.AmqpString.implicit operator string(RabbitMQ.Client.AmqpString amqpString) -> string
950951
~static RabbitMQ.Client.AmqpString.implicit operator System.ReadOnlyMemory<byte>(RabbitMQ.Client.AmqpString amqpString) -> System.ReadOnlyMemory<byte>
951952
~static RabbitMQ.Client.AmqpString.implicit operator System.ReadOnlySpan<byte>(RabbitMQ.Client.AmqpString amqpString) -> System.ReadOnlySpan<byte>
952-
~static RabbitMQ.Client.AmqpString.operator !=(RabbitMQ.Client.AmqpString exchangeType1, RabbitMQ.Client.AmqpString exchangeType2) -> bool
953-
~static RabbitMQ.Client.AmqpString.operator ==(RabbitMQ.Client.AmqpString exchangeType1, RabbitMQ.Client.AmqpString exchangeType2) -> bool
953+
~static RabbitMQ.Client.AmqpString.operator !=(RabbitMQ.Client.AmqpString amqpString1, RabbitMQ.Client.AmqpString amqpString2) -> bool
954+
~static RabbitMQ.Client.AmqpString.operator ==(RabbitMQ.Client.AmqpString amqpString1, RabbitMQ.Client.AmqpString amqpString2) -> bool
954955
~static RabbitMQ.Client.ConsumerTag.implicit operator RabbitMQ.Client.ConsumerTag(string value) -> RabbitMQ.Client.ConsumerTag
955956
~static RabbitMQ.Client.ExchangeName.implicit operator RabbitMQ.Client.ExchangeName(string value) -> RabbitMQ.Client.ExchangeName
956957
~static RabbitMQ.Client.ExchangeType.implicit operator RabbitMQ.Client.ExchangeType(string value) -> RabbitMQ.Client.ExchangeType

projects/RabbitMQ.Client/client/api/AmqpString.cs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
namespace RabbitMQ.Client
3737
{
3838
// TODO lazy string value
39-
public abstract class AmqpString : IEquatable<AmqpString>
39+
public abstract class AmqpString : IEquatable<AmqpString>, IComparable<AmqpString>
4040
{
4141
private readonly string _value;
4242
private readonly ReadOnlyMemory<byte> _stringBytes;
@@ -153,24 +153,36 @@ public override int GetHashCode()
153153
return _value.GetHashCode();
154154
}
155155

156-
public static bool operator ==(AmqpString exchangeType1, AmqpString exchangeType2)
156+
public int CompareTo(AmqpString other)
157157
{
158-
if (exchangeType1 is null || exchangeType2 is null)
158+
if (_value is null)
159159
{
160-
return Object.Equals(exchangeType1, exchangeType2);
160+
throw new InvalidOperationException("[CRITICAL] should not see this");
161+
}
162+
else
163+
{
164+
return _value.CompareTo(other._value);
165+
}
166+
}
167+
168+
public static bool operator ==(AmqpString amqpString1, AmqpString amqpString2)
169+
{
170+
if (amqpString1 is null || amqpString2 is null)
171+
{
172+
return Object.Equals(amqpString1, amqpString2);
161173
}
162174

163-
return exchangeType1.Equals(exchangeType2);
175+
return amqpString1.Equals(amqpString2);
164176
}
165177

166-
public static bool operator !=(AmqpString exchangeType1, AmqpString exchangeType2)
178+
public static bool operator !=(AmqpString amqpString1, AmqpString amqpString2)
167179
{
168-
if (exchangeType1 is null || exchangeType2 is null)
180+
if (amqpString1 is null || amqpString2 is null)
169181
{
170-
return false == Object.Equals(exchangeType1, exchangeType2);
182+
return false == Object.Equals(amqpString1, amqpString2);
171183
}
172184

173-
return false == exchangeType1.Equals(exchangeType2);
185+
return false == amqpString1.Equals(amqpString2);
174186
}
175187
}
176188

projects/RabbitMQ.Client/client/events/QueueNameChangedAfterRecoveryEventArgs.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public sealed class QueueNameChangedAfterRecoveryEventArgs : EventArgs
4040
/// </summary>
4141
/// <param name="nameBefore">The name before.</param>
4242
/// <param name="nameAfter">The name after.</param>
43-
public QueueNameChangedAfterRecoveryEventArgs(string nameBefore, string nameAfter)
43+
public QueueNameChangedAfterRecoveryEventArgs(QueueName nameBefore, QueueName nameAfter)
4444
{
4545
NameBefore = nameBefore;
4646
NameAfter = nameAfter;
@@ -49,11 +49,11 @@ public QueueNameChangedAfterRecoveryEventArgs(string nameBefore, string nameAfte
4949
/// <summary>
5050
/// Gets the name before.
5151
/// </summary>
52-
public readonly string NameBefore;
52+
public readonly QueueName NameBefore;
5353

5454
/// <summary>
5555
/// Gets the name after.
5656
/// </summary>
57-
public readonly string NameAfter;
57+
public readonly QueueName NameAfter;
5858
}
5959
}

projects/RabbitMQ.Client/client/impl/AutorecoveringChannel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ public async Task<QueueDeclareOk> QueueDeclareAsync(QueueName queue, bool durabl
389389
.ConfigureAwait(false);
390390
if (false == passive)
391391
{
392-
var recordedQueue = new RecordedQueue((QueueName)result.QueueName, queue.IsEmpty, durable, exclusive, autoDelete, arguments);
392+
var recordedQueue = new RecordedQueue((QueueName)result, queue.IsEmpty, durable, exclusive, autoDelete, arguments);
393393
await _connection.RecordQueueAsync(recordedQueue, recordedEntitiesSemaphoreHeld: false, cancellationToken)
394394
.ConfigureAwait(false);
395395
}

projects/RabbitMQ.Client/client/impl/AutorecoveringConnection.Recording.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ await DoDeleteRecordedQueueAsync(queueName, cancellationToken)
244244
}
245245
}
246246

247-
async ValueTask DoDeleteRecordedQueueAsync(string queueName, CancellationToken cancellationToken)
247+
async ValueTask DoDeleteRecordedQueueAsync(QueueName queueName, CancellationToken cancellationToken)
248248
{
249249
_recordedQueues.Remove(queueName);
250250

@@ -366,7 +366,7 @@ private void DoRecordConsumer(in RecordedConsumer consumer)
366366
_recordedConsumers[consumer.ConsumerTag] = consumer;
367367
}
368368

369-
internal async ValueTask DeleteRecordedConsumerAsync(string consumerTag,
369+
internal async ValueTask DeleteRecordedConsumerAsync(ConsumerTag consumerTag,
370370
bool recordedEntitiesSemaphoreHeld)
371371
{
372372
if (_disposed)

projects/RabbitMQ.Client/client/impl/AutorecoveringConnection.Recovery.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -317,20 +317,20 @@ private async Task RecoverQueuesAsync(IConnection connection,
317317
throw new InvalidOperationException("recordedEntitiesSemaphore must be held");
318318
}
319319

320-
foreach (RecordedQueue recordedQueue in _recordedQueues.Values.Where(x => _config.TopologyRecoveryFilter?.QueueFilter(x) ?? true).ToArray())
320+
foreach (RecordedQueue recordedQueue in _recordedQueues.Values.Where(x =>
321+
_config.TopologyRecoveryFilter?.QueueFilter(x) ?? true).ToArray())
321322
{
322323
try
323324
{
324-
string newNameStr = string.Empty;
325+
QueueName newName;
325326
using (IChannel ch = await connection.CreateChannelAsync(cancellationToken).ConfigureAwait(false))
326327
{
327-
newNameStr = await recordedQueue.RecoverAsync(ch, cancellationToken)
328+
newName = await recordedQueue.RecoverAsync(ch, cancellationToken)
328329
.ConfigureAwait(false);
329330
await ch.CloseAsync(cancellationToken)
330331
.ConfigureAwait(false);
331332
}
332333
QueueName oldName = recordedQueue.Name;
333-
QueueName newName = (QueueName)newNameStr;
334334

335335
if (oldName != newName)
336336
{
@@ -358,7 +358,7 @@ await RecordQueueAsync(new RecordedQueue(newName, recordedQueue),
358358
try
359359
{
360360
_recordedEntitiesSemaphore.Release();
361-
_queueNameChangedAfterRecoveryWrapper.Invoke(this, new QueueNameChangedAfterRecoveryEventArgs(oldName, newNameStr));
361+
_queueNameChangedAfterRecoveryWrapper.Invoke(this, new QueueNameChangedAfterRecoveryEventArgs(oldName, newName));
362362
}
363363
finally
364364
{

projects/RabbitMQ.Client/client/impl/RecordedQueue.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,20 @@ public RecordedQueue(QueueName newName, in RecordedQueue old)
7373
_arguments = old._arguments;
7474
}
7575

76-
public Task<QueueDeclareOk> RecoverAsync(IChannel channel, CancellationToken cancellationToken)
76+
public async Task<QueueName> RecoverAsync(IChannel channel, CancellationToken cancellationToken)
7777
{
7878
QueueName queueName = _name;
7979
if (_name.IsEmpty)
8080
{
8181
queueName = QueueName.Empty;
8282
}
83-
return channel.QueueDeclareAsync(queue: queueName, passive: false,
83+
84+
QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(queue: queueName, passive: false,
8485
durable: _durable, exclusive: _exclusive, autoDelete: AutoDelete, arguments: _arguments,
85-
cancellationToken: cancellationToken);
86+
cancellationToken: cancellationToken)
87+
.ConfigureAwait(false);
88+
89+
return new QueueName(queueDeclareResult.QueueName);
8690
}
8791

8892
public override string ToString()

0 commit comments

Comments
 (0)