func fetchRemoteBundle()

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