in firestore/swift/firestore-smoketest/SolutionBundles.swift [30:68]
func fetchRemoteBundle(for firestore: Firestore,
from url: URL,
completion: @escaping ((Result<LoadBundleTaskProgress, Error>) -> ())) {
guard let inputStream = InputStream(url: url) else {
let error = self.bundleLoadError(reason: "Unable to create stream from the given url: \(url)")
completion(.failure(error))
return
}
// The return value of this function is ignored, but can be used for more granular
// bundle load observation.
let _ = firestore.loadBundle(inputStream) { (progress, error) in
switch (progress, error) {
case (.some(let value), .none):
if value.state == .success {
completion(.success(value))
} else {
let concreteError = self.bundleLoadError(
reason: "Expected bundle load to be completed, but got \(value.state) instead"
)
completion(.failure(concreteError))
}
case (.none, .some(let concreteError)):
completion(.failure(concreteError))
case (.none, .none):
let concreteError = self.bundleLoadError(reason: "Operation failed, but returned no error.")
completion(.failure(concreteError))
case (.some(let value), .some(let concreteError)):
let concreteError = self.bundleLoadError(
reason: "Operation returned error \(concreteError) with nonnull progress: \(value)"
)
completion(.failure(concreteError))
}
}
}