diff --git a/src/Elastic.Transport/Configuration/RequestConfiguration.cs b/src/Elastic.Transport/Configuration/RequestConfiguration.cs
index 940d69b..d451fd5 100644
--- a/src/Elastic.Transport/Configuration/RequestConfiguration.cs
+++ b/src/Elastic.Transport/Configuration/RequestConfiguration.cs
@@ -7,8 +7,6 @@
using System.Collections.Specialized;
using System.Security.Cryptography.X509Certificates;
-using Elastic.Transport.Extensions;
-
namespace Elastic.Transport;
///
@@ -31,7 +29,7 @@ public RequestConfiguration()
///
public RequestConfiguration(IRequestConfiguration config)
{
-#if NET8_0_OR_GREATER
+#if NET
ArgumentNullException.ThrowIfNull(config);
#else
if (config is null)
diff --git a/src/Elastic.Transport/Configuration/RequestConfigurationDescriptor.cs b/src/Elastic.Transport/Configuration/RequestConfigurationDescriptor.cs
index 552fbdd..f6ce3cc 100644
--- a/src/Elastic.Transport/Configuration/RequestConfigurationDescriptor.cs
+++ b/src/Elastic.Transport/Configuration/RequestConfigurationDescriptor.cs
@@ -5,7 +5,6 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
-using System.Linq;
using System.Security.Cryptography.X509Certificates;
using Elastic.Transport.Extensions;
@@ -19,10 +18,14 @@ public class RequestConfigurationDescriptor : IRequestConfiguration
public RequestConfigurationDescriptor() { }
///
- public RequestConfigurationDescriptor(IRequestConfiguration? config)
+ public RequestConfigurationDescriptor(IRequestConfiguration config)
{
+#if NET
+ ArgumentNullException.ThrowIfNull(config);
+#else
if (config is null)
- return;
+ throw new ArgumentNullException(nameof(config));
+#endif
_accept = config.Accept;
_allowedStatusCodes= config.AllowedStatusCodes;
diff --git a/src/Elastic.Transport/Configuration/TransportConfiguration.cs b/src/Elastic.Transport/Configuration/TransportConfiguration.cs
index 2608a94..b5d106b 100644
--- a/src/Elastic.Transport/Configuration/TransportConfiguration.cs
+++ b/src/Elastic.Transport/Configuration/TransportConfiguration.cs
@@ -117,7 +117,7 @@ public TransportConfiguration(
/// Expert usage: Create a new transport configuration based of a previously configured instance
public TransportConfiguration(ITransportConfiguration config)
{
-#if NET8_0_OR_GREATER
+#if NET
ArgumentNullException.ThrowIfNull(config);
#else
if (config is null)
diff --git a/src/Elastic.Transport/Configuration/TransportConfigurationDescriptor.cs b/src/Elastic.Transport/Configuration/TransportConfigurationDescriptor.cs
index 86c8c7f..ea1ae1d 100644
--- a/src/Elastic.Transport/Configuration/TransportConfigurationDescriptor.cs
+++ b/src/Elastic.Transport/Configuration/TransportConfigurationDescriptor.cs
@@ -20,16 +20,18 @@ namespace Elastic.Transport;
/// Allows you to control how behaves and where/how it connects to Elastic Stack products
///
///
-///
-///
-///
-///
-public class TransportConfigurationDescriptor(
- NodePool nodePool,
- IRequestInvoker? invoker = null,
- Serializer? serializer = null,
- ProductRegistration? productRegistration = null) : TransportConfigurationDescriptorBase(nodePool, invoker, serializer, productRegistration)
+public class TransportConfigurationDescriptor : TransportConfigurationDescriptorBase
{
+ ///
+ /// Creates a new instance of
+ ///
+ ///
+ ///
+ ///
+ ///
+ public TransportConfigurationDescriptor(NodePool nodePool, IRequestInvoker? invoker = null, Serializer? serializer = null, ProductRegistration? productRegistration = null)
+ : base(nodePool, invoker, serializer, productRegistration) { }
+
///
/// Creates a new instance of
///
@@ -51,6 +53,15 @@ public TransportConfigurationDescriptor(string cloudId, BasicAuthentication cred
///
public TransportConfigurationDescriptor(string cloudId, Base64ApiKey credentials, ProductRegistration? productRegistration = null)
: this(new CloudNodePool(cloudId, credentials), productRegistration: productRegistration) { }
+
+ ///
+ /// Creates a new instance of
+ ///
+ /// Expert usage: Create a new transport configuration based of a previously configured instance.
+ ///
+ ///
+ public TransportConfigurationDescriptor(ITransportConfiguration config)
+ : base(config) { }
}
/// >
@@ -98,6 +109,79 @@ protected TransportConfigurationDescriptorBase(NodePool nodePool, IRequestInvoke
_responseHeadersToParse = new HeadersList(_productRegistration.ResponseHeadersToParse);
}
+ /// Expert usage: Create a new transport configuration based of a previously configured instance
+ protected TransportConfigurationDescriptorBase(ITransportConfiguration config)
+ {
+#if NET
+ ArgumentNullException.ThrowIfNull(config);
+#else
+ if (config is null)
+ throw new ArgumentNullException(nameof(config));
+#endif
+
+ // it's important url formatter is repointed to the new instance of ITransportConfiguration
+ _urlFormatter = new UrlFormatter(this);
+
+ _accept = config.Accept;
+ _allowedStatusCodes = config.AllowedStatusCodes;
+ _authentication = config.Authentication;
+ _bootstrapLock = config.BootstrapLock;
+ _certificateFingerprint = config.CertificateFingerprint;
+ _clientCertificates = config.ClientCertificates;
+ _connectionLimit = config.ConnectionLimit;
+ _contentType = config.ContentType;
+ _dateTimeProvider = config.DateTimeProvider;
+ _deadTimeout = config.DeadTimeout;
+ _disableAuditTrail = config.DisableAuditTrail;
+ _disableAutomaticProxyDetection = config.DisableAutomaticProxyDetection;
+ _disableDirectStreaming = config.DisableDirectStreaming;
+ _disableMetaHeader = config.DisableMetaHeader;
+ _disablePings = config.DisablePings;
+ _disableSniff = config.DisableSniff;
+ _dnsRefreshTimeout = config.DnsRefreshTimeout;
+ _enableHttpCompression = config.EnableHttpCompression;
+ _enableTcpStats = config.EnableTcpStats;
+ _enableThreadPoolStats = config.EnableThreadPoolStats;
+ _forceNode = config.ForceNode;
+ _headers = config.Headers;
+ _httpPipeliningEnabled = config.HttpPipeliningEnabled;
+ _keepAliveInterval = config.KeepAliveInterval;
+ _keepAliveTime = config.KeepAliveTime;
+ _maxDeadTimeout = config.MaxDeadTimeout;
+ _maxRetries = config.MaxRetries;
+ _maxRetryTimeout = config.MaxRetryTimeout;
+ _memoryStreamFactory = config.MemoryStreamFactory;
+ _nodePool = config.NodePool;
+ _nodePredicate = config.NodePredicate;
+ _onRequestCompleted = config.OnRequestCompleted;
+ _onRequestDataCreated = config.OnRequestDataCreated;
+ _opaqueId = config.OpaqueId;
+ _parseAllHeaders = config.ParseAllHeaders;
+ _pingTimeout = config.PingTimeout;
+ _pipelineProvider = config.PipelineProvider;
+ _prettyJson = config.PrettyJson;
+ _productRegistration = config.ProductRegistration;
+ _proxyAddress = config.ProxyAddress;
+ _proxyPassword = config.ProxyPassword;
+ _proxyUsername = config.ProxyUsername;
+ _queryStringParameters = config.QueryStringParameters;
+ _requestInvoker = config.RequestInvoker;
+ _requestMetaData = config.RequestMetaData;
+ _requestResponseSerializer = config.RequestResponseSerializer;
+ _requestTimeout = config.RequestTimeout;
+ _responseHeadersToParse = config.ResponseHeadersToParse;
+ _runAs = config.RunAs;
+ _serverCertificateValidationCallback = config.ServerCertificateValidationCallback;
+ _skipDeserializationForStatusCodes = config.SkipDeserializationForStatusCodes;
+ _sniffInformationLifeSpan = config.SniffInformationLifeSpan;
+ _sniffsOnConnectionFault = config.SniffsOnConnectionFault;
+ _sniffsOnStartup = config.SniffsOnStartup;
+ _statusCodeToResponseSuccess = config.StatusCodeToResponseSuccess;
+ _throwExceptions = config.ThrowExceptions;
+ _transferEncodingChunked = config.TransferEncodingChunked;
+ _userAgent = config.UserAgent;
+ }
+
private readonly SemaphoreSlim _bootstrapLock;
private readonly NodePool _nodePool;
private readonly ProductRegistration _productRegistration;
diff --git a/src/Elastic.Transport/Elastic.Transport.csproj b/src/Elastic.Transport/Elastic.Transport.csproj
index 0f1a546..7af8489 100644
--- a/src/Elastic.Transport/Elastic.Transport.csproj
+++ b/src/Elastic.Transport/Elastic.Transport.csproj
@@ -11,7 +11,7 @@
annotations
true
true
- netstandard2.0;netstandard2.1;net462;net6.0;net8.0
+ netstandard2.0;netstandard2.1;net462;net8.0
@@ -29,7 +29,7 @@
-
+
diff --git a/tests/Elastic.Transport.Tests/Configuration/TransportConfigurationTests.cs b/tests/Elastic.Transport.Tests/Configuration/TransportConfigurationTests.cs
index 369f7a5..b63c0f3 100644
--- a/tests/Elastic.Transport.Tests/Configuration/TransportConfigurationTests.cs
+++ b/tests/Elastic.Transport.Tests/Configuration/TransportConfigurationTests.cs
@@ -46,12 +46,14 @@ public void CopiesAllProperties()
autoFaker.RuleFor(x => x.ClientCertificates, f => new X509CertificateCollection());
var config = autoFaker.Generate();
- var newConfig = new TransportConfiguration(config);
-
config.Accept.Should().NotBeEmpty();
config.ClientCertificates.Should().NotBeNull();
+ ITransportConfiguration newConfig = new TransportConfiguration(config);
config.Should().BeEquivalentTo(newConfig);
+
+ ITransportConfiguration newDescriptor = new TransportConfigurationDescriptor(config);
+ config.Should().BeEquivalentTo(newDescriptor);
}
#endif
}