@@ -162,11 +162,16 @@ public enum MongoError {
162162 /// A description of the error.
163163 public let message : String
164164
165+ /// A document providing more information about the write error (e.g. details pertaining to document
166+ /// validation).
167+ public let details : BSONDocument ?
168+
165169 // swiftlint:disable:next nesting
166170 private enum CodingKeys : String , CodingKey {
167171 case code
168172 case codeName
169173 case message = " errmsg "
174+ case details = " errInfo "
170175 }
171176
172177 // TODO: can remove this once SERVER-36755 is resolved
@@ -175,13 +180,15 @@ public enum MongoError {
175180 self . code = try container. decode ( ServerErrorCode . self, forKey: . code)
176181 self . message = try container. decode ( String . self, forKey: . message)
177182 self . codeName = try container. decodeIfPresent ( String . self, forKey: . codeName) ?? " "
183+ self . details = try container. decodeIfPresent ( BSONDocument . self, forKey: . details)
178184 }
179185
180186 // TODO: can remove this once SERVER-36755 is resolved
181- internal init ( code: ServerErrorCode , codeName: String , message: String ) {
187+ internal init ( code: ServerErrorCode , codeName: String , message: String , details : BSONDocument ? ) {
182188 self . code = code
183189 self . codeName = codeName
184190 self . message = message
191+ self . details = details
185192 }
186193 }
187194
@@ -251,12 +258,17 @@ public enum MongoError {
251258 /// The index of the request that errored.
252259 public let index : Int
253260
261+ /// A document providing more information about the write error (e.g. details pertaining to document
262+ /// validation).
263+ public let details : BSONDocument ?
264+
254265 // swiftlint:disable:next nesting
255266 private enum CodingKeys : String , CodingKey {
256267 case code
257268 case codeName
258269 case message = " errmsg "
259270 case index
271+ case details = " errInfo "
260272 }
261273
262274 // TODO: can remove this once SERVER-36755 is resolved
@@ -266,14 +278,16 @@ public enum MongoError {
266278 self . message = try container. decode ( String . self, forKey: . message)
267279 self . index = try container. decode ( Int . self, forKey: . index)
268280 self . codeName = try container. decodeIfPresent ( String . self, forKey: . codeName) ?? " "
281+ self . details = try container. decodeIfPresent ( BSONDocument . self, forKey: . details)
269282 }
270283
271284 // TODO: can remove this once SERVER-36755 is resolved
272- internal init ( code: ServerErrorCode , codeName: String , message: String , index: Int ) {
285+ internal init ( code: ServerErrorCode , codeName: String , message: String , index: Int , details : BSONDocument ? ) {
273286 self . code = code
274287 self . codeName = codeName
275288 self . message = message
276289 self . index = index
290+ self . details = details
277291 }
278292 }
279293}
@@ -496,7 +510,8 @@ internal func convertBulkWriteError(_ error: Error) -> Error {
496510 return MongoError . WriteFailure (
497511 code: firstFailure. code,
498512 codeName: firstFailure. codeName,
499- message: firstFailure. message
513+ message: firstFailure. message,
514+ details: firstFailure. details
500515 )
501516 }
502517
0 commit comments