package request

import (
	"time"
)

// DefaultBackoff is a default strategy for backoff after a retryable request failure.
func DefaultBackoff() Backoff {
	return LinearBackoff(100*time.Millisecond, time.Second)
}

// LinearBackoff applies a backoff increasing by a base amount with each retry capped at a maximum duration.
func LinearBackoff(base, max time.Duration) Backoff {
	return func(n int) time.Duration {
		d := base * time.Duration(n)
		if d > max {
			return max
		}

		return d
	}
}
