func waitUntilDone()

in Sources/Hub/Downloader.swift [267:284]


    func waitUntilDone() throws -> URL {
        // It's either this, or stream the bytes ourselves (add to a buffer, save to disk, etc; boring and finicky)
        let semaphore = DispatchSemaphore(value: 0)
        stateSubscriber = downloadState.sink { state in
            switch state {
            case .completed: semaphore.signal()
            case .failed: semaphore.signal()
            default: break
            }
        }
        semaphore.wait()

        switch downloadState.value {
        case let .completed(url): return url
        case let .failed(error): throw error
        default: throw DownloadError.unexpectedError
        }
    }