mirror of
https://github.com/kean/Pulse.git
synced 2026-05-30 21:07:33 +00:00
109 lines
2.7 KiB
Swift
109 lines
2.7 KiB
Swift
// The MIT License (MIT)
|
|
//
|
|
// Copyright (c) 2020-2024 Alexander Grebenyuk (github.com/kean).
|
|
|
|
#if os(iOS) || os(macOS) || os(visionOS)
|
|
|
|
#if DEBUG
|
|
|
|
import Foundation
|
|
import SwiftUI
|
|
import Pulse
|
|
|
|
struct DecodingErrors_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
Group {
|
|
fileViewer(error: typeMismatchError())
|
|
.previewDisplayName("Type Mismatch (Object)")
|
|
fileViewer(error: typeMismatchErrorInArray())
|
|
.previewDisplayName("Type Mismatch (Array)")
|
|
fileViewer(error: valueNotFound())
|
|
.previewDisplayName("Value Not Found")
|
|
fileViewer(error: keyNotFound())
|
|
.previewDisplayName("Key Not Found")
|
|
fileViewer(error: dataCorrupted())
|
|
.previewDisplayName("Data Corrupted")
|
|
}
|
|
}
|
|
|
|
@ViewBuilder
|
|
private static func fileViewer(error: NetworkLogger.DecodingError) -> some View {
|
|
let viewer = FileViewer(viewModel: .init(title: "Response", context: .init(contentType: .init(rawValue: "application/json"), originalSize: 1200, error: error), data: { MockJSON.allPossibleValues }))
|
|
#if os(iOS) || os(visionOS)
|
|
NavigationView {
|
|
viewer
|
|
}
|
|
#else
|
|
viewer
|
|
#endif
|
|
}
|
|
}
|
|
|
|
private func typeMismatchError() -> NetworkLogger.DecodingError {
|
|
struct JSON: Decodable {
|
|
let actors: [Actor]
|
|
|
|
struct Actor: Decodable {
|
|
let age: String
|
|
}
|
|
}
|
|
return getError(JSON.self)
|
|
}
|
|
|
|
private func typeMismatchErrorInArray() -> NetworkLogger.DecodingError {
|
|
struct JSON: Decodable {
|
|
let actors: [Actor]
|
|
|
|
struct Actor: Decodable {
|
|
let children: [Int]
|
|
}
|
|
}
|
|
return getError(JSON.self)
|
|
}
|
|
|
|
private func valueNotFound() -> NetworkLogger.DecodingError {
|
|
struct JSON: Decodable {
|
|
let actors: [Actor]
|
|
|
|
struct Actor: Decodable {
|
|
let wife: String
|
|
}
|
|
}
|
|
return getError(JSON.self)
|
|
}
|
|
|
|
private func keyNotFound() -> NetworkLogger.DecodingError {
|
|
struct JSON: Decodable {
|
|
let actors: [Actor]
|
|
|
|
struct Actor: Decodable {
|
|
let lastName: String
|
|
}
|
|
}
|
|
return getError(JSON.self)
|
|
}
|
|
|
|
private func dataCorrupted() -> NetworkLogger.DecodingError {
|
|
struct JSON: Decodable {
|
|
let actors: [Actor]
|
|
|
|
struct Actor: Decodable {
|
|
let name: URL
|
|
}
|
|
}
|
|
return getError(JSON.self)
|
|
}
|
|
|
|
private func getError<T: Decodable>(_ type: T.Type) -> NetworkLogger.DecodingError {
|
|
do {
|
|
_ = try JSONDecoder().decode(type, from: MockJSON.allPossibleValues)
|
|
fatalError()
|
|
} catch {
|
|
return NetworkLogger.DecodingError(error as! DecodingError)
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|