Skip to content

Commit e817fce

Browse files
committed
Add copy constructor to RequestConfiguration{Descriptor}
1 parent 363f7a1 commit e817fce

File tree

1 file changed

+81
-7
lines changed

1 file changed

+81
-7
lines changed

src/Elastic.Transport/Configuration/RequestConfiguration.cs

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Collections.Generic;
77
using System.Collections.Specialized;
88
using System.Security.Cryptography.X509Certificates;
9+
910
using Elastic.Transport.Extensions;
1011

1112
namespace Elastic.Transport;
@@ -108,7 +109,6 @@ public interface IRequestConfiguration
108109
/// </summary>
109110
TimeSpan? RequestTimeout { get; }
110111

111-
112112
/// <summary> Specifies the headers from the response that should be parsed. </summary>
113113
HeadersList? ResponseHeadersToParse { get; }
114114

@@ -163,6 +163,48 @@ public record RequestConfiguration : IRequestConfiguration
163163
/// <summary> The default ping timeout when the connection is over HTTPS. Defaults to 5 seconds </summary>
164164
public static readonly TimeSpan DefaultPingTimeoutOnSsl = TimeSpan.FromSeconds(5);
165165

166+
/// <inheritdoc cref="IRequestConfiguration"/>
167+
public RequestConfiguration()
168+
{
169+
}
170+
171+
/// <inheritdoc cref="IRequestConfiguration"/>
172+
public RequestConfiguration(IRequestConfiguration config)
173+
{
174+
#if NET8_0_OR_GREATER
175+
ArgumentNullException.ThrowIfNull(config);
176+
#else
177+
if (config is null)
178+
throw new ArgumentNullException(nameof(config));
179+
#endif
180+
181+
Accept = config.Accept;
182+
AllowedStatusCodes = config.AllowedStatusCodes;
183+
Authentication = config.Authentication;
184+
ClientCertificates = config.ClientCertificates;
185+
ContentType = config.ContentType;
186+
DisableDirectStreaming = config.DisableDirectStreaming;
187+
DisableAuditTrail = config.DisableAuditTrail;
188+
DisablePings = config.DisablePings;
189+
DisableSniff = config.DisableSniff;
190+
HttpPipeliningEnabled = config.HttpPipeliningEnabled;
191+
EnableHttpCompression = config.EnableHttpCompression;
192+
ForceNode = config.ForceNode;
193+
MaxRetries = config.MaxRetries;
194+
MaxRetryTimeout = config.MaxRetryTimeout;
195+
OpaqueId = config.OpaqueId;
196+
PingTimeout = config.PingTimeout;
197+
RequestTimeout = config.RequestTimeout;
198+
RunAs = config.RunAs;
199+
ThrowExceptions = config.ThrowExceptions;
200+
TransferEncodingChunked = config.TransferEncodingChunked;
201+
Headers = (config.Headers is null) ? null : new NameValueCollection(config.Headers);
202+
EnableTcpStats = config.EnableTcpStats;
203+
EnableThreadPoolStats = config.EnableThreadPoolStats;
204+
ResponseHeadersToParse = (config.ResponseHeadersToParse is null) ? null : new HeadersList(config.ResponseHeadersToParse);
205+
ParseAllHeaders = config.ParseAllHeaders;
206+
RequestMetaData = config.RequestMetaData;
207+
}
166208

167209
/// <inheritdoc />
168210
public string? Accept { get; init; }
@@ -189,7 +231,7 @@ public record RequestConfiguration : IRequestConfiguration
189231
public bool? DisablePings { get; init; }
190232

191233
/// <inheritdoc />
192-
public bool? DisablePing { get; init; }
234+
public bool? DisablePing { get; init; } // TODO: ?
193235

194236
/// <inheritdoc />
195237
public bool? DisableSniff { get; init; }
@@ -198,7 +240,7 @@ public record RequestConfiguration : IRequestConfiguration
198240
public bool? HttpPipeliningEnabled { get; init; }
199241

200242
/// <inheritdoc />
201-
public bool? EnableHttpPipelining { get; init; } = true;
243+
public bool? EnableHttpPipelining { get; init; } = true; // TODO: ?
202244

203245
/// <inheritdoc />
204246
public bool? EnableHttpCompression { get; init; }
@@ -247,7 +289,6 @@ public record RequestConfiguration : IRequestConfiguration
247289

248290
/// <inheritdoc />
249291
public RequestMetaData? RequestMetaData { get; init; }
250-
251292
}
252293

253294
/// <inheritdoc cref="IRequestConfiguration"/>
@@ -256,6 +297,40 @@ public class RequestConfigurationDescriptor : IRequestConfiguration
256297
/// <inheritdoc cref="IRequestConfiguration"/>
257298
public RequestConfigurationDescriptor() { }
258299

300+
/// <inheritdoc cref="IRequestConfiguration"/>
301+
public RequestConfigurationDescriptor(IRequestConfiguration? config)
302+
{
303+
if (config is null)
304+
return;
305+
306+
_accept = config.Accept;
307+
_allowedStatusCodes= config.AllowedStatusCodes;
308+
_authentication = config.Authentication;
309+
_clientCertificates = config.ClientCertificates;
310+
_contentType = config.ContentType;
311+
_disableDirectStreaming = config.DisableDirectStreaming;
312+
_disableAuditTrail = config.DisableAuditTrail;
313+
_disablePings = config.DisablePings;
314+
_disableSniff = config.DisableSniff;
315+
_httpPipeliningEnabled = config.HttpPipeliningEnabled;
316+
_enableHttpCompression = config.EnableHttpCompression;
317+
_forceNode = config.ForceNode;
318+
_maxRetries = config.MaxRetries;
319+
_maxRetryTimeout = config.MaxRetryTimeout;
320+
_opaqueId = config.OpaqueId;
321+
_pingTimeout = config.PingTimeout;
322+
_requestTimeout = config.RequestTimeout;
323+
_runAs = config.RunAs;
324+
_throwExceptions = config.ThrowExceptions;
325+
_transferEncodingChunked = config.TransferEncodingChunked;
326+
_headers = (config.Headers is null) ? null : new NameValueCollection(config.Headers);
327+
_enableTcpStats = config.EnableTcpStats;
328+
_enableThreadPoolStats = config.EnableThreadPoolStats;
329+
_responseHeadersToParse = (config.ResponseHeadersToParse is null) ? null : new HeadersList(config.ResponseHeadersToParse);
330+
_parseAllHeaders = config.ParseAllHeaders;
331+
_requestMetaData = config.RequestMetaData;
332+
}
333+
259334
private string? _accept;
260335
private IReadOnlyCollection<int>? _allowedStatusCodes;
261336
private AuthorizationHeader? _authentication;
@@ -282,11 +357,10 @@ public RequestConfigurationDescriptor() { }
282357
private RequestMetaData? _requestMetaData;
283358

284359
#pragma warning disable CS0649 // Field is never assigned to, and will always have its default value
285-
private bool? _enableHttpCompression;
286-
private TimeSpan? _maxRetryTimeout;
360+
private bool? _enableHttpCompression; // TODO: ?
361+
private TimeSpan? _maxRetryTimeout; // TODO: ?
287362
#pragma warning restore CS0649 // Field is never assigned to, and will always have its default value
288363

289-
290364
/// <inheritdoc cref="IRequestConfiguration.RunAs"/>
291365
public RequestConfigurationDescriptor RunAs(string username)
292366
{

0 commit comments

Comments
 (0)