code: func (m *ManifestWriter) AddEntry(ctx context.Context, data io.Reader, e *ManifestEntry) (addr storage.Address, err error) {
  	entry := newManifestTrieEntry(e, nil)
  	if data != nil {
  		var wait func(context.Context) error
  		addr, wait, err = m.api.Store(ctx, data, e.Size, m.trie.encrypted)
  		if err != nil {
  			return nil, err
  		}
  		err = wait(ctx)
  		if err != nil {
  			return nil, err
  		}
  		entry.Hash = addr.Hex()
  	}
  	if entry.Hash == "" {
  		return addr, errors.New("missing entry hash")
  	}
  	m.trie.addEntry(entry, m.quitC)
  	return addr, nil
  }
docs: // AddEntry stores the given data and adds the resulting address to the manifest