Skip to content

Commit

Permalink
Merge pull request #63 from SwiftPackageIndex/cleanup
Browse files Browse the repository at this point in the history
Move extension to make it easier to find/extract
  • Loading branch information
finestructure committed Feb 20, 2024
2 parents 64d2a82 + 3e795fc commit 1df19ec
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 34 deletions.
53 changes: 53 additions & 0 deletions Sources/ValidatorCore/Extensions/URLSession+ext.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Copyright Dave Verwer, Sven A. Schmidt, and other contributors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif


#if os(Linux)
enum URLSessionErrors: Error {
case invalidUrlResponse, missingResponseData
}

extension URLSession {
func data(for request: URLRequest, delegate: (URLSessionTaskDelegate)? = nil) async throws -> (Data, URLResponse) {
try await withCheckedThrowingContinuation { continuation in
let task = self.dataTask(with: request) { data, response, error in
if let error = error {
continuation.resume(throwing: error)
return
}
guard let response = response as? HTTPURLResponse else {
continuation.resume(throwing: URLSessionErrors.invalidUrlResponse)
return
}
guard let data = data else {
continuation.resume(throwing: URLSessionErrors.missingResponseData)
return
}
continuation.resume(returning: (data, response))
}
task.resume()
}
}

func data(from url: URL) async throws -> (Data, URLResponse) {
try await data(for: URLRequest(url: url))
}
}
#endif
34 changes: 0 additions & 34 deletions Sources/ValidatorCore/SwiftPackageIndexAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -58,37 +58,3 @@ extension SwiftPackageIndexAPI {
return try Self.decoder.decode([PackageRecord].self, from: data)
}
}


#if os(Linux)
enum URLSessionErrors: Error {
case invalidUrlResponse, missingResponseData
}

extension URLSession {
func data(for request: URLRequest, delegate: (URLSessionTaskDelegate)? = nil) async throws -> (Data, URLResponse) {
try await withCheckedThrowingContinuation { continuation in
let task = self.dataTask(with: request) { data, response, error in
if let error = error {
continuation.resume(throwing: error)
return
}
guard let response = response as? HTTPURLResponse else {
continuation.resume(throwing: URLSessionErrors.invalidUrlResponse)
return
}
guard let data = data else {
continuation.resume(throwing: URLSessionErrors.missingResponseData)
return
}
continuation.resume(returning: (data, response))
}
task.resume()
}
}

func data(from url: URL) async throws -> (Data, URLResponse) {
try await data(for: URLRequest(url: url))
}
}
#endif

0 comments on commit 1df19ec

Please sign in to comment.