@@ -21,7 +21,6 @@ use crate::{
21
21
error:: { Error , ErrorKind , Result , WriteError } ,
22
22
operation:: OperationWithDefaults ,
23
23
results:: { DeleteResult , InsertOneResult , UpdateResult } ,
24
- BoxFuture ,
25
24
Client ,
26
25
ClientSession ,
27
26
Cursor ,
@@ -31,6 +30,7 @@ use crate::{
31
30
32
31
use super :: {
33
32
CursorInfo ,
33
+ OperationResponse ,
34
34
Retryability ,
35
35
WriteResponseBody ,
36
36
COMMAND_OVERHEAD_SIZE ,
@@ -263,67 +263,69 @@ impl<'a> OperationWithDefaults for BulkWrite<'a> {
263
263
response : RawCommandResponse ,
264
264
description : & ' b StreamDescription ,
265
265
session : Option < & ' b mut ClientSession > ,
266
- ) -> BoxFuture < ' b , Result < Self :: O > > {
267
- async move {
268
- let response: WriteResponseBody < BulkWriteResponse > = response. body ( ) ?;
269
-
270
- let mut result = BulkWriteResult :: new ( ) ;
271
- result. populate_summary_info ( & response. summary ) ;
272
-
273
- let mut bulk_write_error = BulkWriteError :: default ( ) ;
274
- if let Some ( write_concern_error) = response. write_concern_error {
275
- bulk_write_error
276
- . write_concern_errors
277
- . push ( write_concern_error) ;
278
- }
279
-
280
- let specification = CursorSpecification :: new (
281
- response. body . cursor ,
282
- description. server_address . clone ( ) ,
283
- None ,
284
- None ,
285
- self . options . and_then ( |options| options. comment . clone ( ) ) ,
286
- ) ;
287
- let iteration_result = match session {
288
- Some ( session) => {
289
- let mut session_cursor =
290
- SessionCursor :: new ( self . client . clone ( ) , specification, None ) ;
291
- self . iterate_results_cursor (
292
- session_cursor. stream ( session) ,
293
- & mut bulk_write_error,
294
- & mut result,
295
- )
296
- . await
266
+ ) -> OperationResponse < ' b , Self :: O > {
267
+ OperationResponse :: Async (
268
+ async move {
269
+ let response: WriteResponseBody < BulkWriteResponse > = response. body ( ) ?;
270
+
271
+ let mut result = BulkWriteResult :: new ( ) ;
272
+ result. populate_summary_info ( & response. summary ) ;
273
+
274
+ let mut bulk_write_error = BulkWriteError :: default ( ) ;
275
+ if let Some ( write_concern_error) = response. write_concern_error {
276
+ bulk_write_error
277
+ . write_concern_errors
278
+ . push ( write_concern_error) ;
297
279
}
298
- None => {
299
- let cursor = Cursor :: new ( self . client . clone ( ) , specification, None , None ) ;
300
- self . iterate_results_cursor ( cursor, & mut bulk_write_error, & mut result)
280
+
281
+ let specification = CursorSpecification :: new (
282
+ response. body . cursor ,
283
+ description. server_address . clone ( ) ,
284
+ None ,
285
+ None ,
286
+ self . options . and_then ( |options| options. comment . clone ( ) ) ,
287
+ ) ;
288
+ let iteration_result = match session {
289
+ Some ( session) => {
290
+ let mut session_cursor =
291
+ SessionCursor :: new ( self . client . clone ( ) , specification, None ) ;
292
+ self . iterate_results_cursor (
293
+ session_cursor. stream ( session) ,
294
+ & mut bulk_write_error,
295
+ & mut result,
296
+ )
301
297
. await
302
- }
303
- } ;
304
-
305
- let source = match iteration_result {
306
- Ok ( ( ) ) => {
307
- if bulk_write_error. is_empty ( ) {
308
- return Ok ( result) ;
309
- } else {
310
- None
311
298
}
299
+ None => {
300
+ let cursor = Cursor :: new ( self . client . clone ( ) , specification, None , None ) ;
301
+ self . iterate_results_cursor ( cursor, & mut bulk_write_error, & mut result)
302
+ . await
303
+ }
304
+ } ;
305
+
306
+ let source = match iteration_result {
307
+ Ok ( ( ) ) => {
308
+ if bulk_write_error. is_empty ( ) {
309
+ return Ok ( result) ;
310
+ } else {
311
+ None
312
+ }
313
+ }
314
+ Err ( top_level_error) => Some ( top_level_error) ,
315
+ } ;
316
+
317
+ if !result. is_empty ( ) {
318
+ bulk_write_error. partial_result = Some ( result) ;
312
319
}
313
- Err ( top_level_error) => Some ( top_level_error) ,
314
- } ;
315
320
316
- if !result. is_empty ( ) {
317
- bulk_write_error. partial_result = Some ( result) ;
321
+ let error = Error :: new (
322
+ ErrorKind :: ClientBulkWrite ( bulk_write_error) ,
323
+ response. labels ,
324
+ ) ;
325
+ Err ( error. with_source ( source) )
318
326
}
319
-
320
- let error = Error :: new (
321
- ErrorKind :: ClientBulkWrite ( bulk_write_error) ,
322
- response. labels ,
323
- ) ;
324
- Err ( error. with_source ( source) )
325
- }
326
- . boxed ( )
327
+ . boxed ( ) ,
328
+ )
327
329
}
328
330
329
331
fn handle_error ( & self , error : Error ) -> Result < Self :: O > {
0 commit comments