code: func (rself *privateReaderAdapter) Read(data []byte) (int, error) {
  	lenToCopy := len(rself.bufferToBeRead)
  	if lenToCopy == 0 {
  		rself.workReceipt = <-rself.Writer.workChan
  		if rself.workReceipt == nil {
  			// no more data to consume
  			rself.closeReceived = true
  			return 0, io.EOF
  		}
  		rself.bufferToBeRead = *rself.workReceipt
  		lenToCopy = len(rself.bufferToBeRead)
  	}
  	if lenToCopy > len(data) {
  		lenToCopy = len(data)
  	}
  	copy(data[:lenToCopy], rself.bufferToBeRead[:lenToCopy])
  	rself.bufferToBeRead = rself.bufferToBeRead[lenToCopy:]
  	if len(rself.bufferToBeRead) == 0 {
  		rself.Writer.doneWorkChan <- rself.workReceipt
  		rself.workReceipt = nil
  	}
  	return lenToCopy, nil
  }
docs: // this is the private Read implementation, to be used with io.Copy
  // on the read thread