11using System ;
2- using System . Collections . Generic ;
32using System . IO ;
4- using System . Linq ;
5- using System . Text ;
63using System . Threading . Tasks ;
74
85namespace Elasticsearch . Net
@@ -11,16 +8,21 @@ public class ResponseBuilder<TReturn>
118 where TReturn : class
129 {
1310 private const int BufferSize = 81920 ;
11+ private static readonly VoidResponse Void = new VoidResponse ( ) ;
12+ private static readonly IDisposable EmptyDisposable = new MemoryStream ( ) ;
13+
14+ private readonly RequestData _requestData ;
15+ private readonly bool _disableDirectStreaming ;
1416
1517 public Exception Exception { get ; set ; }
1618 public int ? StatusCode { get ; set ; }
1719 public Stream Stream { get ; set ; }
1820
19- private readonly RequestData _requestData ;
20-
2121 public ResponseBuilder ( RequestData requestData )
2222 {
2323 _requestData = requestData ;
24+ _disableDirectStreaming =
25+ this . _requestData . PostData ? . DisableDirectStreaming ?? this . _requestData . ConnectionSettings . DisableDirectStreaming ;
2426 }
2527
2628 public ElasticsearchResponse < TReturn > ToResponse ( )
@@ -53,21 +55,19 @@ private ElasticsearchResponse<TReturn> Initialize(int? statusCode, Exception exc
5355 return response ;
5456 }
5557
56- private static IDisposable EmptyDisposable = new MemoryStream ( ) ;
57-
5858 private void SetBody ( ElasticsearchResponse < TReturn > response , Stream stream )
59- {
60- byte [ ] bytes = null ;
61- if ( NeedsToEagerReadStream ( ) )
62- {
63- var inMemoryStream = this . _requestData . MemoryStreamFactory . Create ( ) ;
64- stream . CopyTo ( inMemoryStream , BufferSize ) ;
65- bytes = this . SwapStreams ( ref stream , ref inMemoryStream ) ;
59+ {
60+ byte [ ] bytes = null ;
61+ if ( NeedsToEagerReadStream ( ) )
62+ {
63+ var inMemoryStream = this . _requestData . MemoryStreamFactory . Create ( ) ;
64+ stream . CopyTo ( inMemoryStream , BufferSize ) ;
65+ bytes = this . SwapStreams ( ref stream , ref inMemoryStream ) ;
6666 }
6767
6868 var needsDispose = typeof ( TReturn ) != typeof ( Stream ) ;
69- using ( needsDispose ? stream : EmptyDisposable )
70- {
69+ using ( needsDispose ? stream : EmptyDisposable )
70+ {
7171 if ( response . Success )
7272 {
7373 if ( ! SetSpecialTypes ( stream , response , bytes ) )
@@ -81,25 +81,25 @@ private void SetBody(ElasticsearchResponse<TReturn> response, Stream stream)
8181 ServerError serverError ;
8282 if ( ServerError . TryCreate ( stream , out serverError ) )
8383 response . ServerError = serverError ;
84- if ( this . _requestData . ConnectionSettings . DisableDirectStreaming )
84+ if ( _disableDirectStreaming )
8585 response . ResponseBodyInBytes = bytes ;
8686 }
8787 }
8888 }
89-
89+
9090 private async Task SetBodyAsync ( ElasticsearchResponse < TReturn > response , Stream stream )
91- {
92- byte [ ] bytes = null ;
93- if ( NeedsToEagerReadStream ( ) )
94- {
95- var inMemoryStream = this . _requestData . MemoryStreamFactory . Create ( ) ;
96- await stream . CopyToAsync ( inMemoryStream , BufferSize , this . _requestData . CancellationToken ) . ConfigureAwait ( false ) ;
97- bytes = this . SwapStreams ( ref stream , ref inMemoryStream ) ;
91+ {
92+ byte [ ] bytes = null ;
93+ if ( NeedsToEagerReadStream ( ) )
94+ {
95+ var inMemoryStream = this . _requestData . MemoryStreamFactory . Create ( ) ;
96+ await stream . CopyToAsync ( inMemoryStream , BufferSize , this . _requestData . CancellationToken ) . ConfigureAwait ( false ) ;
97+ bytes = this . SwapStreams ( ref stream , ref inMemoryStream ) ;
9898 }
99-
100- var needsDispose = typeof ( TReturn ) != typeof ( Stream ) ;
101- using ( needsDispose ? stream : EmptyDisposable )
102- {
99+
100+ var needsDispose = typeof ( TReturn ) != typeof ( Stream ) ;
101+ using ( needsDispose ? stream : EmptyDisposable )
102+ {
103103 if ( response . Success )
104104 {
105105 if ( ! SetSpecialTypes ( stream , response , bytes ) )
@@ -108,10 +108,10 @@ private async Task SetBodyAsync(ElasticsearchResponse<TReturn> response, Stream
108108 else response . Body = await this . _requestData . ConnectionSettings . Serializer . DeserializeAsync < TReturn > ( stream , this . _requestData . CancellationToken ) . ConfigureAwait ( false ) ;
109109 }
110110 }
111- else if ( response . HttpStatusCode != null )
111+ else if ( response . HttpStatusCode != null )
112112 {
113113 response . ServerError = await ServerError . TryCreateAsync ( stream , this . _requestData . CancellationToken ) . ConfigureAwait ( false ) ;
114- if ( this . _requestData . ConnectionSettings . DisableDirectStreaming )
114+ if ( _disableDirectStreaming )
115115 response . ResponseBodyInBytes = bytes ;
116116 }
117117 }
@@ -127,7 +127,7 @@ private void Finalize(ElasticsearchResponse<TReturn> response)
127127 }
128128
129129 private bool NeedsToEagerReadStream ( ) =>
130- this . _requestData . ConnectionSettings . DisableDirectStreaming || typeof ( TReturn ) == typeof ( string ) || typeof ( TReturn ) == typeof ( byte [ ] ) ;
130+ _disableDirectStreaming || typeof ( TReturn ) == typeof ( string ) || typeof ( TReturn ) == typeof ( byte [ ] ) ;
131131
132132 private byte [ ] SwapStreams ( ref Stream responseStream , ref MemoryStream ms )
133133 {
@@ -142,16 +142,16 @@ private byte[] SwapStreams(ref Stream responseStream, ref MemoryStream ms)
142142 private bool SetSpecialTypes ( Stream responseStream , ElasticsearchResponse < TReturn > cs , byte [ ] bytes )
143143 {
144144 var setSpecial = true ;
145- if ( this . _requestData . ConnectionSettings . DisableDirectStreaming )
145+ if ( _disableDirectStreaming )
146146 cs . ResponseBodyInBytes = bytes ;
147- var returnType = typeof ( TReturn ) ;
147+ var returnType = typeof ( TReturn ) ;
148148 if ( returnType == typeof ( string ) )
149149 this . SetStringResult ( cs as ElasticsearchResponse < string > , bytes ) ;
150150 else if ( returnType == typeof ( byte [ ] ) )
151151 this . SetByteResult ( cs as ElasticsearchResponse < byte [ ] > , bytes ) ;
152152 else if ( returnType == typeof ( VoidResponse ) )
153153 this . SetVoidResult ( cs as ElasticsearchResponse < VoidResponse > , responseStream ) ;
154- else if ( returnType == typeof ( Stream ) )
154+ else if ( returnType == typeof ( Stream ) )
155155 this . SetStreamResult ( cs as ElasticsearchResponse < Stream > , responseStream ) ;
156156 else
157157 setSpecial = false ;
@@ -164,12 +164,10 @@ private bool SetSpecialTypes(Stream responseStream, ElasticsearchResponse<TRetur
164164
165165 private void SetStreamResult ( ElasticsearchResponse < Stream > result , Stream response ) => result . Body = response ;
166166
167- private static VoidResponse _void = new VoidResponse ( ) ;
168-
169167 private void SetVoidResult ( ElasticsearchResponse < VoidResponse > result , Stream response )
170168 {
171169 response . Dispose ( ) ;
172- result . Body = _void ;
170+ result . Body = Void ;
173171 }
174172 }
175173}
0 commit comments