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