code: func NewWriterToReaderAdapter(toBeAdapted func(io.Reader) (io.Reader, error),
  	output io.Writer,
  	shouldCloseDownstream bool) io.WriteCloser {
  	retval := privateReaderAdapter{
  		Writer: WriterToReaderAdapter{
  			workChan:     make(chan *[]byte),
  			doneWorkChan: make(chan *[]byte),
  			errChan:      make(chan error, 3),
  			closed:       false,
  		}}
  	go copyDataToOutput(toBeAdapted, &retval, output, shouldCloseDownstream)
  	return &retval.Writer
  }
docs: // This makes a io.Writer from a io.Reader and begins reading and writing data
  // The returned class is not thread safe and public methods must be called from a single thread