in Sources/SPTDataLoaderSwift/Request.swift [112:143]
func processResponse(_ response: SPTDataLoaderResponse) {
var handlers: [(ResponseState) -> Void] = []
var responseState: ResponseState = .completed(response: response)
accessLock.sync {
guard case .executed = state else {
return
}
// Respect any previous error except the one `SPTDataLoaderResponse` sets
// based on status code, which should instead be enforced using a validator.
if let error = response.error, (error as NSError).domain != SPTDataLoaderResponseErrorDomain {
responseState = .completedWithError(response: response, error: error)
state = .completedWithError(response: response, error: error)
} else {
do {
try responseValidators.forEach { validator in try validator(response) }
state = .completed(response: response)
} catch let validationError {
responseState = .completedWithError(response: response, error: validationError)
state = .completedWithError(response: response, error: validationError)
}
}
handlers = responseHandlers
responseHandlers.removeAll()
responseValidators.removeAll()
}
handlers.forEach { handler in handler(responseState) }
}