diff --git a/Sources/SwiftRequest/ServiceExecutor.swift b/Sources/SwiftRequest/ServiceExecutor.swift index a614480..d2dba37 100644 --- a/Sources/SwiftRequest/ServiceExecutor.swift +++ b/Sources/SwiftRequest/ServiceExecutor.swift @@ -2,9 +2,13 @@ import Foundation public protocol ServiceExecutor { func execute(_ request: Request) async throws -> (Data, HTTPURLResponse) + var jsonDecoder: JSONDecoder? { get } } extension ServiceExecutor { + public var jsonDecoder: JSONDecoder? { + nil + } public func callAsFunction(_ request: Request) async throws -> Output { let (output, _): (Output, _) = try await self(request) return output @@ -12,7 +16,7 @@ extension ServiceExecutor { public func callAsFunction(_ request: Request) async throws -> (Output, HTTPURLResponse) { let (data, response): (Data, HTTPURLResponse) = try await self.execute(request) - let output = try JSONDecoder().decode(Output.self, from: data) + let output = try (jsonDecoder ?? JSONDecoder()).decode(Output.self, from: data) return (output, response) }