func processResponse()

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) }
    }