code: func Retry(ctx context.Context, p Policy, e Executer) error {
  	b, cancel := p.Start(ctx)
  	defer cancel()
  
  	for Continue(b) {
  		err := e.Execute(ctx)
  		if err == nil {
  			return nil
  		}
  
  		if IsPermanentError(err) {
  			return errors.Wrap(err, `permanent error`)
  		}
  	}
  	return errors.New(`retry attempts failed`)
  }
docs: // Retry is a convenience wrapper around the backoff algorithm. If your target
  // operation can be nicely enclosed in the `Executer` interface, this will
  // remove your need to write much of the boilerplate.