@@ -75,28 +75,35 @@ func replaceErrors(err error) error {
7575 // ignored. For non-DDL write commands (insert, update, etc), acknowledgement
7676 // should be be propagated at the result-level: e.g.,
7777 // SingleResult.Acknowledged.
78- if errors .Is (err , driver .ErrUnacknowledgedWrite ) {
78+ // if errors.Is(err, driver.ErrUnacknowledgedWrite) {
79+ // return nil
80+ // }
81+ if err == driver .ErrUnacknowledgedWrite {
7982 return nil
8083 }
8184
8285 if errors .Is (err , topology .ErrTopologyClosed ) {
8386 return ErrClientDisconnected
8487 }
85- if de , ok := err .(driver.Error ); ok {
88+
89+ var de driver.Error
90+ if errors .As (err , & de ) {
8691 return CommandError {
8792 Code : de .Code ,
8893 Message : de .Message ,
8994 Labels : de .Labels ,
9095 Name : de .Name ,
91- Wrapped : de . Wrapped ,
96+ Wrapped : err ,
9297 Raw : bson .Raw (de .Raw ),
9398 }
9499 }
95- if qe , ok := err .(driver.QueryFailureError ); ok {
100+
101+ var qe driver.QueryFailureError
102+ if errors .As (err , & qe ) {
96103 // qe.Message is "command failure"
97104 ce := CommandError {
98105 Name : qe .Message ,
99- Wrapped : qe . Wrapped ,
106+ Wrapped : err ,
100107 Raw : bson .Raw (qe .Response ),
101108 }
102109
@@ -111,18 +118,25 @@ func replaceErrors(err error) error {
111118
112119 return ce
113120 }
114- if me , ok := err .(mongocrypt.Error ); ok {
115- return MongocryptError {Code : me .Code , Message : me .Message }
121+
122+ var me mongocrypt.Error
123+ if errors .As (err , & me ) {
124+ return MongocryptError {
125+ Code : me .Code ,
126+ Message : me .Message ,
127+ wrapped : err ,
128+ }
116129 }
117130
118131 if errors .Is (err , codecutil .ErrNilValue ) {
119132 return ErrNilValue
120133 }
121134
122- if marshalErr , ok := err .(codecutil.MarshalError ); ok {
135+ var marshalErr codecutil.MarshalError
136+ if errors .As (err , & marshalErr ) {
123137 return MarshalError {
124138 Value : marshalErr .Value ,
125- Err : marshalErr . Err ,
139+ Err : err ,
126140 }
127141 }
128142
@@ -199,13 +213,19 @@ func IsNetworkError(err error) bool {
199213type MongocryptError struct {
200214 Code int32
201215 Message string
216+ wrapped error
202217}
203218
204219// Error implements the error interface.
205220func (m MongocryptError ) Error () string {
206221 return fmt .Sprintf ("mongocrypt error %d: %v" , m .Code , m .Message )
207222}
208223
224+ // Unwrap returns the underlying error.
225+ func (m MongocryptError ) Unwrap () error {
226+ return m .wrapped
227+ }
228+
209229// EncryptionKeyVaultError represents an error while communicating with the key vault collection during in-use
210230// encryption.
211231type EncryptionKeyVaultError struct {
0 commit comments