docs: def blocking_reader(reader, input, buffer_size=_DEFAULT_BUFFER_SIZE):
      """Provides an implementation of using the reader co-routine with a file-like object.
  
      Args:
          reader(Coroutine): A reader co-routine.
          input(BaseIO): The file-like object to read from.
          buffer_size(Optional[int]): The optional buffer size to use.
      """
      ion_event = None
      while True:
          read_event = (yield ion_event)
          ion_event = reader.send(read_event)
          while ion_event is not None and ion_event.event_type.is_stream_signal:
              data = input.read(buffer_size)
              if len(data) == 0:
                  # End of file.
                  if ion_event.event_type is IonEventType.INCOMPLETE:
                      ion_event = reader.send(NEXT_EVENT)
                      continue
                  else:
                      yield ION_STREAM_END_EVENT
                      return
              ion_event = reader.send(read_data_event(data))