@@ -56,13 +56,15 @@ func replaceErrors(err error) error {
56
56
Labels : de .Labels ,
57
57
Name : de .Name ,
58
58
Wrapped : de .Wrapped ,
59
+ Raw : bson .Raw (de .Raw ),
59
60
}
60
61
}
61
62
if qe , ok := err .(driver.QueryFailureError ); ok {
62
63
// qe.Message is "command failure"
63
64
ce := CommandError {
64
65
Name : qe .Message ,
65
66
Wrapped : qe .Wrapped ,
67
+ Raw : bson .Raw (qe .Response ),
66
68
}
67
69
68
70
dollarErr , err := qe .Response .LookupErr ("$err" )
@@ -218,6 +220,7 @@ type CommandError struct {
218
220
Labels []string // Categories to which the error belongs
219
221
Name string // A human-readable name corresponding to the error code
220
222
Wrapped error // The underlying error, if one exists.
223
+ Raw bson.Raw // The original server response containing the error.
221
224
}
222
225
223
226
// Error implements the error interface.
@@ -277,6 +280,9 @@ type WriteError struct {
277
280
Code int
278
281
Message string
279
282
Details bson.Raw
283
+
284
+ // The original write error from the server response.
285
+ Raw bson.Raw
280
286
}
281
287
282
288
func (we WriteError ) Error () string {
@@ -332,6 +338,7 @@ func writeErrorsFromDriverWriteErrors(errs driver.WriteErrors) WriteErrors {
332
338
Code : int (err .Code ),
333
339
Message : err .Message ,
334
340
Details : bson .Raw (err .Details ),
341
+ Raw : bson .Raw (err .Raw ),
335
342
})
336
343
}
337
344
return wes
@@ -344,6 +351,7 @@ type WriteConcernError struct {
344
351
Code int
345
352
Message string
346
353
Details bson.Raw
354
+ Raw bson.Raw // The original write concern error from the server response.
347
355
}
348
356
349
357
// Error implements the error interface.
@@ -365,6 +373,9 @@ type WriteException struct {
365
373
366
374
// The categories to which the exception belongs.
367
375
Labels []string
376
+
377
+ // The original server response containing the error.
378
+ Raw bson.Raw
368
379
}
369
380
370
381
// Error implements the error interface.
@@ -451,6 +462,7 @@ func convertDriverWriteConcernError(wce *driver.WriteConcernError) *WriteConcern
451
462
Code : int (wce .Code ),
452
463
Message : wce .Message ,
453
464
Details : bson .Raw (wce .Details ),
465
+ Raw : bson .Raw (wce .Raw ),
454
466
}
455
467
}
456
468
@@ -584,6 +596,7 @@ func processWriteError(err error) (returnResult, error) {
584
596
WriteConcernError : convertDriverWriteConcernError (tt .WriteConcernError ),
585
597
WriteErrors : writeErrorsFromDriverWriteErrors (tt .WriteErrors ),
586
598
Labels : tt .Labels ,
599
+ Raw : bson .Raw (tt .Raw ),
587
600
}
588
601
default :
589
602
return rrNone , replaceErrors (err )
0 commit comments