code: def _restart_on_unavailable(restart):
      
      resume_token = b""
      item_buffer = []
      iterator = restart()
      while True:
          try:
              for item in iterator:
                  item_buffer.append(item)
                  if item.resume_token:
                      resume_token = item.resume_token
                      break
          except ServiceUnavailable:
              del item_buffer[:]
              iterator = restart(resume_token=resume_token)
              continue
  
          if len(item_buffer) == 0:
              break
  
          for item in item_buffer:
              yield item
  
          del item_buffer[:]
docs: Restart iteration after :exc:`.ServiceUnavailable`.
  
      :type restart: callable
      :param restart: curried function returning iterator