code: func (b *batchProducer) Add(data []byte, partitionKey string) error {
  	if !b.isRunning() {
  		return errors.New("Cannot call Add when BatchProducer is not running (to prevent the buffer filling up and Add blocking indefinitely).")
  	}
  	if b.isBufferFull() && !b.config.AddBlocksWhenBufferFull {
  		return errors.New("Buffer is full")
  	}
  	b.records <- batchRecord{data: data, partitionKey: partitionKey}
  	return nil
  }
docs: // from/for interface Producer