Skip to content

Commit 064bd8b

Browse files
Change the connection string parser inside the ConnectionSettings class to prevent reinventing the wheel (#102)
* Simplify endpoint extraction in ConnectionSettings * fix using in DocumentFilter file. * Corrected the assignment of the Endpoint and FullyQualifiedNamespace properties in the ConnectionSettings class. * Optimize parsing of connection string in ConnectionSettings constructor. * Ensure connection string starts with 'Endpoint=' in ConnectionSettings * Restoring two constructors in ConnectionSettings
1 parent 01bab69 commit 064bd8b

19 files changed

Lines changed: 56 additions & 68 deletions

File tree

src/Ev.ServiceBus.Abstractions/Configuration/ClientOptions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// ReSharper disable once CheckNamespace
22

3+
using Ev.ServiceBus.Abstractions.Configuration;
4+
35
namespace Ev.ServiceBus.Abstractions;
46

57
public abstract class ClientOptions : IClientOptions

src/Ev.ServiceBus.Abstractions/Configuration/ConnectionSettings.cs

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
1-
using Azure.Core;
2-
using Azure.Messaging.ServiceBus;
31
using System;
2+
using Azure.Messaging.ServiceBus;
3+
using Azure.Core;
44

5-
namespace Ev.ServiceBus.Abstractions;
5+
namespace Ev.ServiceBus.Abstractions.Configuration;
66

77
public class ConnectionSettings
88
{
99
internal ConnectionSettings(string connectionString, ServiceBusClientOptions options)
1010
{
1111
ConnectionString = connectionString;
1212
Options = options;
13-
Endpoint = GetEndpointFromConnectionString(connectionString);
13+
Endpoint = ServiceBusConnectionStringProperties.Parse(connectionString).Endpoint.AbsoluteUri;
1414
}
1515

1616
internal ConnectionSettings(string fullyQualifiedNamespace, TokenCredential credentials, ServiceBusClientOptions options)
1717
{
18+
if (!fullyQualifiedNamespace.StartsWith("Endpoint=", StringComparison.OrdinalIgnoreCase))
19+
{
20+
fullyQualifiedNamespace = $"Endpoint={fullyQualifiedNamespace}";
21+
}
22+
23+
var connectionStringProperties = ServiceBusConnectionStringProperties.Parse(fullyQualifiedNamespace);
24+
1825
Options = options;
19-
FullyQualifiedNamespace = fullyQualifiedNamespace;
26+
FullyQualifiedNamespace = connectionStringProperties.FullyQualifiedNamespace;
2027
Credentials = credentials;
21-
Endpoint = GetEndpointFromFullyQualifiedNamespace(fullyQualifiedNamespace);
28+
Endpoint = connectionStringProperties.Endpoint.AbsoluteUri;
2229
}
2330

2431
public string Endpoint { get; }
@@ -31,38 +38,6 @@ internal ConnectionSettings(string fullyQualifiedNamespace, TokenCredential cred
3138

3239
public TokenCredential? Credentials { get; }
3340

34-
private string GetEndpointFromConnectionString(string connectionString)
35-
{
36-
var KeyValuePairDelimiter = ';';
37-
var KeyValueSeparator = '=';
38-
var EndpointConfigName = "Endpoint";
39-
40-
// First split based on ';'
41-
var keyValuePairs = connectionString.Split(new[] { KeyValuePairDelimiter }, StringSplitOptions.RemoveEmptyEntries);
42-
foreach (var keyValuePair in keyValuePairs)
43-
{
44-
// Now split based on the _first_ '='
45-
var keyAndValue = keyValuePair.Split(new[] { KeyValueSeparator }, 2);
46-
var key = keyAndValue[0];
47-
if (keyAndValue.Length != 2)
48-
{
49-
return string.Empty;
50-
}
51-
52-
var value = keyAndValue[1].Trim();
53-
if (key.Equals(EndpointConfigName, StringComparison.OrdinalIgnoreCase))
54-
{
55-
return value;
56-
}
57-
}
58-
return string.Empty;
59-
}
60-
61-
private string GetEndpointFromFullyQualifiedNamespace(string fullyQualifiedNamespace)
62-
{
63-
return $"sb://{fullyQualifiedNamespace}/";
64-
}
65-
6641
private bool Equals(ConnectionSettings other) =>
6742
string.Equals(Endpoint, other.Endpoint, StringComparison.Ordinal)
6843
&& string.Equals(ConnectionString, other.ConnectionString, StringComparison.Ordinal)

src/Ev.ServiceBus.Abstractions/Configuration/Extensions/ClientOptionsExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Azure.Core;
22
using Azure.Messaging.ServiceBus;
3+
using Ev.ServiceBus.Abstractions.Configuration;
34

45
// ReSharper disable once CheckNamespace
56
namespace Ev.ServiceBus.Abstractions;

src/Ev.ServiceBus.Abstractions/Configuration/IClientOptions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
// ReSharper disable once CheckNamespace
2+
3+
using Ev.ServiceBus.Abstractions.Configuration;
4+
25
namespace Ev.ServiceBus.Abstractions;
36

47
public interface IClientOptions

src/Ev.ServiceBus.Abstractions/Configuration/ServiceBusSettings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Azure.Core;
22
using Azure.Messaging.ServiceBus;
3+
using Ev.ServiceBus.Abstractions.Configuration;
34

45
namespace Ev.ServiceBus.Abstractions;
56

src/Ev.ServiceBus.AsyncApi/DocumentFilter.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4-
using System.Text.Encodings.Web;
5-
using System.Text.Json;
64
using Ev.ServiceBus.Abstractions;
5+
using Ev.ServiceBus.Abstractions.Configuration;
76
using Microsoft.Extensions.Options;
8-
using Microsoft.VisualBasic;
97
using NJsonSchema;
108
using Saunter.AsyncApiSchema.v2;
119
using Saunter.AsyncApiSchema.v2.Bindings;
@@ -117,7 +115,7 @@ private Operation CreatePublishOperation(string channelName, ClientOptions optio
117115

118116
private IMessage GenerateMessage(string payloadTypeId, Type payloadType, DocumentFilterContext context, AsyncApiSchemaResolver asyncApiSchemaResolver)
119117
{
120-
var message = new Saunter.AsyncApiSchema.v2.Message()
118+
var message = new Message()
121119
{
122120
Name = payloadTypeId.Replace("/", "¤"),
123121
Payload = GetOrCreatePayloadSchema(payloadType, context),

src/Ev.ServiceBus.HealthChecks/ConnectionSettingsComparer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3-
using Ev.ServiceBus.Abstractions;
3+
using Ev.ServiceBus.Abstractions.Configuration;
44

55
namespace Ev.ServiceBus.HealthChecks;
66

src/Ev.ServiceBus/Management/Factories/ClientFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
22
using Azure.Messaging.ServiceBus;
3-
using Ev.ServiceBus.Abstractions;
3+
using Ev.ServiceBus.Abstractions.Configuration;
44

55
namespace Ev.ServiceBus;
66

src/Ev.ServiceBus/Management/Factories/IClientFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Azure.Messaging.ServiceBus;
2-
using Ev.ServiceBus.Abstractions;
2+
using Ev.ServiceBus.Abstractions.Configuration;
33

44
// ReSharper disable once CheckNamespace
55
namespace Ev.ServiceBus;

src/Ev.ServiceBus/Management/ServiceBusRegistry.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Linq;
44
using Azure.Messaging.ServiceBus;
55
using Ev.ServiceBus.Abstractions;
6+
using Ev.ServiceBus.Abstractions.Configuration;
67
using Microsoft.Extensions.Options;
78

89
namespace Ev.ServiceBus.Management;

0 commit comments

Comments
 (0)