From 437e207d38205a22678cf7c7d8ec89a081eeb0bf Mon Sep 17 00:00:00 2001 From: Honza Dvorsky Date: Wed, 19 Jul 2023 15:14:39 +0200 Subject: [PATCH] Improved Encoding/Decoding error descriptions --- .../OpenAPIRuntime/Errors/CodingErrors.swift | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/Sources/OpenAPIRuntime/Errors/CodingErrors.swift b/Sources/OpenAPIRuntime/Errors/CodingErrors.swift index c659077a..c31291d7 100644 --- a/Sources/OpenAPIRuntime/Errors/CodingErrors.swift +++ b/Sources/OpenAPIRuntime/Errors/CodingErrors.swift @@ -18,13 +18,13 @@ extension DecodingError: PrettyStringConvertible { let output: String switch self { case .dataCorrupted(let context): - output = "dataCorrupted - \(context.debugDescription)" + output = "dataCorrupted - \(context.prettyDescription)" case .keyNotFound(let key, let context): - output = "keyNotFound \(key) - \(context.debugDescription)" + output = "keyNotFound \(key) - \(context.prettyDescription)" case .typeMismatch(let type, let context): - output = "typeMismatch \(type) - in \(context.debugDescription)" + output = "typeMismatch \(type) - \(context.prettyDescription)" case .valueNotFound(let type, let context): - output = "valueNotFound \(type) - \(context.debugDescription)" + output = "valueNotFound \(type) - \(context.prettyDescription)" @unknown default: output = "unknown: \(localizedDescription)" } @@ -32,15 +32,29 @@ extension DecodingError: PrettyStringConvertible { } } +extension DecodingError.Context: PrettyStringConvertible { + var prettyDescription: String { + let path = codingPath.map(\.description).joined(separator: "/") + return "at \(path): \(debugDescription) (underlying error: \(underlyingError?.localizedDescription ?? ""))" + } +} + extension EncodingError: PrettyStringConvertible { var prettyDescription: String { let output: String switch self { case .invalidValue(let value, let context): - output = "invalidValue \(value) - \(context)" + output = "invalidValue \(value) - \(context.prettyDescription)" @unknown default: output = "unknown: \(localizedDescription)" } return "EncodingError: \(output)" } } + +extension EncodingError.Context: PrettyStringConvertible { + var prettyDescription: String { + let path = codingPath.map(\.description).joined(separator: "/") + return "at \(path): \(debugDescription) (underlying error: \(underlyingError?.localizedDescription ?? ""))" + } +}