package realdebrid import ( "math" "strings" "time" ) func RetryUntilOk[T any](fn func() (T, error)) *T { const initialDelay = 2 * time.Second const maxDelay = 128 * time.Second for i := 0; ; i++ { result, err := fn() if err == nil { return &result } if strings.Contains(err.Error(), "404") { return nil } delay := time.Duration(math.Min(float64(initialDelay*time.Duration(math.Pow(2, float64(i)))), float64(maxDelay))) time.Sleep(delay) } }