From b6bbd8a72f565874a1c3eeebc6aadd4fa30f5de6 Mon Sep 17 00:00:00 2001 From: kean Date: Sun, 31 Jul 2022 21:54:42 -0400 Subject: [PATCH] Add support for decoding errors in HTML --- .../Extensions/NetworkLoggerSummary+Sharing.swift | 13 ++++++++++--- Sources/PulseUI/Helpers/JSONPrinter.swift | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Sources/PulseUI/Extensions/NetworkLoggerSummary+Sharing.swift b/Sources/PulseUI/Extensions/NetworkLoggerSummary+Sharing.swift index 6d321925..1163bab8 100644 --- a/Sources/PulseUI/Extensions/NetworkLoggerSummary+Sharing.swift +++ b/Sources/PulseUI/Extensions/NetworkLoggerSummary+Sharing.swift @@ -17,7 +17,9 @@ enum Render { } static func asHTML(request: LoggerNetworkRequestEntity, store: LoggerStore) -> String { - render(request: request, store: store, using: HTMLRenderer()) + let details = DecodedNetworkRequestDetailsEntity(request: request) + let error = details.error?.error as? NetworkLoggerDecodingError + return render(request: request, store: store, using: HTMLRenderer(error: error)) } private static func render(request: LoggerNetworkRequestEntity, store: LoggerStore, using renderer: Renderer) -> String { @@ -180,6 +182,11 @@ private final class MarkdownRenderer: Renderer { private final class HTMLRenderer: Renderer { private var contents = "" private var toc = [ToCItem]() + private var error: NetworkLoggerDecodingError? + + init(error: NetworkLoggerDecodingError?) { + self.error = error + } struct ToCItem { let level: Int @@ -208,14 +215,13 @@ private final class HTMLRenderer: Renderer { contents.append("") } - #warning("TODO: pass error") private func makePre(data: Data) -> String { guard let json = try? JSONSerialization.jsonObject(with: data, options: []) else { return String(data: data, encoding: .utf8) ?? "Data: \(ByteCountFormatter.string(fromByteCount: Int64(data.count), countStyle: .memory))" } let renderer = HTMLJSONRender() let printer = JSONPrinter(renderer: renderer) - printer.render(json: json, error: nil) + printer.render(json: json, error: error) return renderer.make() } @@ -338,6 +344,7 @@ body { .s { color: rgb(255, 45, 85); } .o { color: rgb(0, 122, 255); } .n { color: rgb(191, 90, 242); } + .err { background-color: red; } @media (prefers-color-scheme: dark) { body { background-color: #211F1E; diff --git a/Sources/PulseUI/Helpers/JSONPrinter.swift b/Sources/PulseUI/Helpers/JSONPrinter.swift index b239307d..dceb398a 100644 --- a/Sources/PulseUI/Helpers/JSONPrinter.swift +++ b/Sources/PulseUI/Helpers/JSONPrinter.swift @@ -25,9 +25,9 @@ protocol JSONRenderer: AnyObject { final class HTMLJSONRender: JSONRenderer { private var output = "" - #warning("TODO: add isError support") func append(_ string: String, element: JSONElement, error: NetworkLoggerDecodingError?) { - output.append("\(string)") + let htmlClass = error == nil ? getClass(for: element) : "err" + output.append("\(string)") } func indent(count: Int) {