code: func (s *DriveService) Fetch(ctx context.Context, title string) (body io.ReadCloser, size uint32, err error) {
  	file, err := s.Get(ctx, title)
  	if err != nil {
  		return
  	}
  	// TODO: maybe in the case of no download link, remove the file.
  	// The file should have malformed or converted to a Docs file
  	// unwantedly.
  	// TODO(mpl): I do not think the above comment is accurate. It
  	// looks like at least one case we do not get a DownloadUrl is when
  	// the UI would make you pick a conversion format first (spreadsheet,
  	// doc, etc). -> we should see if the API offers the possibility to do
  	// that conversion. and we could pass the type(s) we want (pdf, xls, doc...)
  	// as arguments (in an options struct) to Fetch.
  	if file.DownloadUrl == "" {
  		err = errNoDownload
  		return
  	}
  
  	req, _ := http.NewRequest("GET", file.DownloadUrl, nil)
  	req.WithContext(ctx)
  	var resp *http.Response
  	if resp, err = s.client.Transport.RoundTrip(req); err != nil {
  		return
  	}
  	if file.FileSize > math.MaxUint32 || file.FileSize < 0 {
  		err = errors.New("file too big")
  	}
  	return resp.Body, uint32(file.FileSize), err
  }
docs: // Fetch retrieves the metadata and contents of a file.