code: func (r *exportReader) Read(p []byte) (n int, err error) {
  	if r.currentShard >= r.shardCount {
  		err = io.EOF
  		return
  	}
  	if r.body == nil {
  		uri, _ := r.shardURIs[r.currentShard]
  		headers := map[string]string{
  			"Accept": "text/csv",
  		}
  		path := fmt.Sprintf("/export?index=%s&field=%s&shard=%d",
  			r.field.index.Name(), r.field.Name(), r.currentShard)
  		resp, err := r.client.doRequest(uri, "GET", path, headers, nil)
  		if err = anyError(resp, err); err != nil {
  			return 0, errors.Wrap(err, "doing export request")
  		}
  		defer resp.Body.Close()
  		r.body, err = ioutil.ReadAll(resp.Body)
  		if err != nil {
  			return 0, errors.Wrap(err, "reading response body")
  		}
  		r.bodyIndex = 0
  	}
  	n = copy(p, r.body[r.bodyIndex:])
  	r.bodyIndex += n
  	if n >= len(r.body) {
  		r.body = nil
  		r.currentShard++
  	}
  	return
  }
docs: // Read updates the passed array with the exported CSV data and returns the number of bytes read