Add support for decoding errors in HTML

This commit is contained in:
kean
2022-07-31 21:54:42 -04:00
parent 21d7edfc12
commit b6bbd8a72f
2 changed files with 12 additions and 5 deletions
@@ -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("</pre>")
}
#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;
+2 -2
View File
@@ -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("<span class=\"\(getClass(for: element))\">\(string)</span>")
let htmlClass = error == nil ? getClass(for: element) : "err"
output.append("<span class=\"\(htmlClass)\">\(string)</span>")
}
func indent(count: Int) {