func WithRNG(v Random) CommonOption {
	return &commonOption{option.New(identRNG{}, v)}
}
WithRNG specifies the random number generator used for jittering.
If not provided one will be created, but if you want a truly random
jittering, make sure to provide one that you explicitly initialized
package backoff
import (
	"time"
	"github.com/lestrrat-go/option"
)
type identInterval struct{}
type identJitterFactor struct{}
type identMaxInterval struct{}
type identMaxRetries struct{}
type identMinInterval struct{}
type identMultiplier struct{}
type identRNG struct{}
type ControllerOption interface {
	ConstantOption
	ExponentialOption
	CommonOption
	controllerOption()
}
type controllerOption struct {
	Option
}
func (*controllerOption) exponentialOption() {}
func (*controllerOption) controllerOption()  {}
func (*controllerOption) constantOption()    {}
type ConstantOption interface {
	Option
	constantOption()
}
type constantOption struct {
	Option
}
func (*constantOption) constantOption() {}
type ExponentialOption interface {
	Option
	exponentialOption()
}
type exponentialOption struct {
	Option
}
func (*exponentialOption) exponentialOption() {}
type CommonOption interface {
	ExponentialOption
	ConstantOption
}
type commonOption struct {
	Option
}
func (*commonOption) constantOption()    {}
func (*commonOption) exponentialOption() {}
func WithMaxRetries(v int) ControllerOption {
	return &controllerOption{option.New(identMaxRetries{}, v)}
}
func WithInterval(v time.Duration) ConstantOption {
	return &constantOption{option.New(identInterval{}, v)}
}
func WithMaxInterval(v time.Duration) ExponentialOption {
	return &exponentialOption{option.New(identMaxInterval{}, v)}
}
func WithMinInterval(v time.Duration) ExponentialOption {
	return &exponentialOption{option.New(identMinInterval{}, v)}
}
func WithMultiplier(v float64) ExponentialOption {
	return &exponentialOption{option.New(identMultiplier{}, v)}
}
func WithJitterFactor(v float64) CommonOption {
	return &commonOption{option.New(identJitterFactor{}, v)}
}