code: func (a *API) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (k storage.Address, wait func(context.Context) error, err error) {
  	apiPutCount.Inc(1)
  	r := strings.NewReader(content)
  	key, waitContent, err := a.fileStore.Store(ctx, r, int64(len(content)), toEncrypt)
  	if err != nil {
  		apiPutFail.Inc(1)
  		return nil, nil, err
  	}
  	manifest := fmt.Sprintf(`{"entries":[{"hash":"%v","contentType":"%s"}]}`, key, contentType)
  	r = strings.NewReader(manifest)
  	key, waitManifest, err := a.fileStore.Store(ctx, r, int64(len(manifest)), toEncrypt)
  	if err != nil {
  		apiPutFail.Inc(1)
  		return nil, nil, err
  	}
  	return key, func(ctx context.Context) error {
  		err := waitContent(ctx)
  		if err != nil {
  			return err
  		}
  		return waitManifest(ctx)
  	}, nil
  }
docs: // Put provides singleton manifest creation on top of FileStore store