code: @Beta
    public <T> T readLines(LineProcessor<T> processor) throws IOException {
      checkNotNull(processor);
  
      Closer closer = Closer.create();
      try {
        Reader reader = closer.register(openStream());
        return CharStreams.readLines(reader, processor);
      } catch (Throwable e) {
        throw closer.rethrow(e);
      } finally {
        closer.close();
      }
    }
docs: Reads lines of text from this source, processing each line as it is read using the given
  {@link LineProcessor processor}. Stops when all lines have been processed or the processor
  returns {@code false} and returns the result produced by the processor.
  
  <p>Like {@link BufferedReader}, this method breaks lines on any of {@code \n}, {@code \r} or
  {@code \r\n}, does not include the line separator in the lines passed to the {@code processor}
  and does not consider there to be an extra empty line at the end if the content is terminated
  with a line separator.
  
  @throws IOException if an I/O error occurs in the process of reading from this source or if
  {@code processor} throws an {@code IOException}
  @since 16.0