package utils import ( "alfred/pkg/log" "errors" "go.uber.org/zap" "time" ) func RetryFunctionWithResponseAndError(fn func() (interface{}, error), maxRetries int, initialDelay time.Duration) (interface{}, error) { var response interface{} var err error for retry := 0; retry < maxRetries; retry++ { if response, err = fn(); err == nil { return response, nil // Operation succeeded. } log.Error("Error while retrying", zap.Error(err)) // Calculate the delay using exponential backoff. delay := initialDelay * (1 << uint(retry)) time.Sleep(delay) } return nil, errors.New("retry with error and response failed") } func RetryFunctionWithError(fn func() error, maxRetries int, initialDelay time.Duration) error { var err error for retry := 0; retry < maxRetries; retry++ { if err = fn(); err == nil { return nil // Operation succeeded. } log.Error("Error while retrying", zap.Error(err)) // Calculate the delay using exponential backoff. delay := initialDelay * (1 << uint(retry)) time.Sleep(delay) } return errors.New("retry with error failed") }