Skip to content

Commit af894be

Browse files
authored
Add RequestConfigurationDescriptor copy constructor (#136)
Add `RequestConfigurationDescriptor` copy constructor. As well removes `net6` TFMs.
1 parent 7d3a633 commit af894be

File tree

6 files changed

+107
-20
lines changed

6 files changed

+107
-20
lines changed

src/Elastic.Transport/Configuration/RequestConfiguration.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
using System.Collections.Specialized;
88
using System.Security.Cryptography.X509Certificates;
99

10-
using Elastic.Transport.Extensions;
11-
1210
namespace Elastic.Transport;
1311

1412
/// <inheritdoc cref="IRequestConfiguration"/>
@@ -31,7 +29,7 @@ public RequestConfiguration()
3129
/// <inheritdoc cref="IRequestConfiguration"/>
3230
public RequestConfiguration(IRequestConfiguration config)
3331
{
34-
#if NET8_0_OR_GREATER
32+
#if NET
3533
ArgumentNullException.ThrowIfNull(config);
3634
#else
3735
if (config is null)

src/Elastic.Transport/Configuration/RequestConfigurationDescriptor.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System;
66
using System.Collections.Generic;
77
using System.Collections.Specialized;
8-
using System.Linq;
98
using System.Security.Cryptography.X509Certificates;
109

1110
using Elastic.Transport.Extensions;
@@ -19,10 +18,14 @@ public class RequestConfigurationDescriptor : IRequestConfiguration
1918
public RequestConfigurationDescriptor() { }
2019

2120
/// <inheritdoc cref="IRequestConfiguration"/>
22-
public RequestConfigurationDescriptor(IRequestConfiguration? config)
21+
public RequestConfigurationDescriptor(IRequestConfiguration config)
2322
{
23+
#if NET
24+
ArgumentNullException.ThrowIfNull(config);
25+
#else
2426
if (config is null)
25-
return;
27+
throw new ArgumentNullException(nameof(config));
28+
#endif
2629

2730
_accept = config.Accept;
2831
_allowedStatusCodes= config.AllowedStatusCodes;

src/Elastic.Transport/Configuration/TransportConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public TransportConfiguration(
117117
/// Expert usage: Create a new transport configuration based of a previously configured instance
118118
public TransportConfiguration(ITransportConfiguration config)
119119
{
120-
#if NET8_0_OR_GREATER
120+
#if NET
121121
ArgumentNullException.ThrowIfNull(config);
122122
#else
123123
if (config is null)

src/Elastic.Transport/Configuration/TransportConfigurationDescriptor.cs

Lines changed: 93 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@ namespace Elastic.Transport;
2020
/// Allows you to control how <see cref="ITransport{TConfiguration}"/> behaves and where/how it connects to Elastic Stack products
2121
/// </summary>
2222
/// <remarks> <inheritdoc cref="TransportConfigurationDescriptor" path="/summary"/></remarks>
23-
/// <param name="nodePool"><inheritdoc cref="NodePool" path="/summary"/></param>
24-
/// <param name="invoker"><inheritdoc cref="IRequestInvoker" path="/summary"/></param>
25-
/// <param name="serializer"><inheritdoc cref="Serializer" path="/summary"/></param>
26-
/// <param name="productRegistration"><inheritdoc cref="ProductRegistration" path="/summary"/></param>
27-
public class TransportConfigurationDescriptor(
28-
NodePool nodePool,
29-
IRequestInvoker? invoker = null,
30-
Serializer? serializer = null,
31-
ProductRegistration? productRegistration = null) : TransportConfigurationDescriptorBase<TransportConfigurationDescriptor>(nodePool, invoker, serializer, productRegistration)
23+
public class TransportConfigurationDescriptor : TransportConfigurationDescriptorBase<TransportConfigurationDescriptor>
3224
{
25+
/// <summary>
26+
/// Creates a new instance of <see cref="TransportConfigurationDescriptor"/>
27+
/// </summary>
28+
/// <param name="nodePool"><inheritdoc cref="NodePool" path="/summary"/></param>
29+
/// <param name="invoker"><inheritdoc cref="IRequestInvoker" path="/summary"/></param>
30+
/// <param name="serializer"><inheritdoc cref="Serializer" path="/summary"/></param>
31+
/// <param name="productRegistration"><inheritdoc cref="ProductRegistration" path="/summary"/></param>
32+
public TransportConfigurationDescriptor(NodePool nodePool, IRequestInvoker? invoker = null, Serializer? serializer = null, ProductRegistration? productRegistration = null)
33+
: base(nodePool, invoker, serializer, productRegistration) { }
34+
3335
/// <summary>
3436
/// Creates a new instance of <see cref="TransportConfigurationDescriptor"/>
3537
/// </summary>
@@ -51,6 +53,15 @@ public TransportConfigurationDescriptor(string cloudId, BasicAuthentication cred
5153
/// </summary>
5254
public TransportConfigurationDescriptor(string cloudId, Base64ApiKey credentials, ProductRegistration? productRegistration = null)
5355
: this(new CloudNodePool(cloudId, credentials), productRegistration: productRegistration) { }
56+
57+
/// <summary>
58+
/// Creates a new instance of <see cref="TransportConfigurationDescriptor"/>
59+
/// <para>
60+
/// Expert usage: Create a new transport configuration based of a previously configured instance.
61+
/// </para>
62+
/// </summary>
63+
public TransportConfigurationDescriptor(ITransportConfiguration config)
64+
: base(config) { }
5465
}
5566

5667
/// <inheritdoc cref="TransportConfigurationDescriptor"/>>
@@ -98,6 +109,79 @@ protected TransportConfigurationDescriptorBase(NodePool nodePool, IRequestInvoke
98109
_responseHeadersToParse = new HeadersList(_productRegistration.ResponseHeadersToParse);
99110
}
100111

112+
/// Expert usage: Create a new transport configuration based of a previously configured instance
113+
protected TransportConfigurationDescriptorBase(ITransportConfiguration config)
114+
{
115+
#if NET
116+
ArgumentNullException.ThrowIfNull(config);
117+
#else
118+
if (config is null)
119+
throw new ArgumentNullException(nameof(config));
120+
#endif
121+
122+
// it's important url formatter is repointed to the new instance of ITransportConfiguration
123+
_urlFormatter = new UrlFormatter(this);
124+
125+
_accept = config.Accept;
126+
_allowedStatusCodes = config.AllowedStatusCodes;
127+
_authentication = config.Authentication;
128+
_bootstrapLock = config.BootstrapLock;
129+
_certificateFingerprint = config.CertificateFingerprint;
130+
_clientCertificates = config.ClientCertificates;
131+
_connectionLimit = config.ConnectionLimit;
132+
_contentType = config.ContentType;
133+
_dateTimeProvider = config.DateTimeProvider;
134+
_deadTimeout = config.DeadTimeout;
135+
_disableAuditTrail = config.DisableAuditTrail;
136+
_disableAutomaticProxyDetection = config.DisableAutomaticProxyDetection;
137+
_disableDirectStreaming = config.DisableDirectStreaming;
138+
_disableMetaHeader = config.DisableMetaHeader;
139+
_disablePings = config.DisablePings;
140+
_disableSniff = config.DisableSniff;
141+
_dnsRefreshTimeout = config.DnsRefreshTimeout;
142+
_enableHttpCompression = config.EnableHttpCompression;
143+
_enableTcpStats = config.EnableTcpStats;
144+
_enableThreadPoolStats = config.EnableThreadPoolStats;
145+
_forceNode = config.ForceNode;
146+
_headers = config.Headers;
147+
_httpPipeliningEnabled = config.HttpPipeliningEnabled;
148+
_keepAliveInterval = config.KeepAliveInterval;
149+
_keepAliveTime = config.KeepAliveTime;
150+
_maxDeadTimeout = config.MaxDeadTimeout;
151+
_maxRetries = config.MaxRetries;
152+
_maxRetryTimeout = config.MaxRetryTimeout;
153+
_memoryStreamFactory = config.MemoryStreamFactory;
154+
_nodePool = config.NodePool;
155+
_nodePredicate = config.NodePredicate;
156+
_onRequestCompleted = config.OnRequestCompleted;
157+
_onRequestDataCreated = config.OnRequestDataCreated;
158+
_opaqueId = config.OpaqueId;
159+
_parseAllHeaders = config.ParseAllHeaders;
160+
_pingTimeout = config.PingTimeout;
161+
_pipelineProvider = config.PipelineProvider;
162+
_prettyJson = config.PrettyJson;
163+
_productRegistration = config.ProductRegistration;
164+
_proxyAddress = config.ProxyAddress;
165+
_proxyPassword = config.ProxyPassword;
166+
_proxyUsername = config.ProxyUsername;
167+
_queryStringParameters = config.QueryStringParameters;
168+
_requestInvoker = config.RequestInvoker;
169+
_requestMetaData = config.RequestMetaData;
170+
_requestResponseSerializer = config.RequestResponseSerializer;
171+
_requestTimeout = config.RequestTimeout;
172+
_responseHeadersToParse = config.ResponseHeadersToParse;
173+
_runAs = config.RunAs;
174+
_serverCertificateValidationCallback = config.ServerCertificateValidationCallback;
175+
_skipDeserializationForStatusCodes = config.SkipDeserializationForStatusCodes;
176+
_sniffInformationLifeSpan = config.SniffInformationLifeSpan;
177+
_sniffsOnConnectionFault = config.SniffsOnConnectionFault;
178+
_sniffsOnStartup = config.SniffsOnStartup;
179+
_statusCodeToResponseSuccess = config.StatusCodeToResponseSuccess;
180+
_throwExceptions = config.ThrowExceptions;
181+
_transferEncodingChunked = config.TransferEncodingChunked;
182+
_userAgent = config.UserAgent;
183+
}
184+
101185
private readonly SemaphoreSlim _bootstrapLock;
102186
private readonly NodePool _nodePool;
103187
private readonly ProductRegistration _productRegistration;

src/Elastic.Transport/Elastic.Transport.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<Nullable>annotations</Nullable>
1212
<IsPackable>true</IsPackable>
1313
<GenerateDocumentationFile>true</GenerateDocumentationFile>
14-
<TargetFrameworks>netstandard2.0;netstandard2.1;net462;net6.0;net8.0</TargetFrameworks>
14+
<TargetFrameworks>netstandard2.0;netstandard2.1;net462;net8.0</TargetFrameworks>
1515
</PropertyGroup>
1616

1717
<ItemGroup>
@@ -29,7 +29,7 @@
2929
</PackageReference>
3030
</ItemGroup>
3131

32-
<ItemGroup Condition="'$(TargetFramework)' != 'net6.0' And '$(TargetFramework)' != 'net8.0'">
32+
<ItemGroup Condition="'$(TargetFramework)' != 'net8.0'">
3333
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
3434
<PackageReference Include="System.Buffers" Version="4.5.1" />
3535
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />

tests/Elastic.Transport.Tests/Configuration/TransportConfigurationTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@ public void CopiesAllProperties()
4646
autoFaker.RuleFor(x => x.ClientCertificates, f => new X509CertificateCollection());
4747

4848
var config = autoFaker.Generate();
49-
var newConfig = new TransportConfiguration(config);
50-
5149
config.Accept.Should().NotBeEmpty();
5250
config.ClientCertificates.Should().NotBeNull();
5351

52+
ITransportConfiguration newConfig = new TransportConfiguration(config);
5453
config.Should().BeEquivalentTo(newConfig);
54+
55+
ITransportConfiguration newDescriptor = new TransportConfigurationDescriptor(config);
56+
config.Should().BeEquivalentTo(newDescriptor);
5557
}
5658
#endif
5759
}

0 commit comments

Comments
 (0)