github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/backoff/delay.go (about)

     1  package backoff
     2  
     3  import (
     4  	"time"
     5  )
     6  
     7  type (
     8  	delayOptions struct {
     9  		fast Backoff
    10  		slow Backoff
    11  	}
    12  	delayOption func(o *delayOptions)
    13  )
    14  
    15  func WithFastBackoff(fast Backoff) delayOption {
    16  	return func(o *delayOptions) {
    17  		o.fast = fast
    18  	}
    19  }
    20  
    21  func WithSlowBackoff(slow Backoff) delayOption {
    22  	return func(o *delayOptions) {
    23  		o.slow = slow
    24  	}
    25  }
    26  
    27  func Delay(t Type, i int, opts ...delayOption) time.Duration {
    28  	optionsHolder := delayOptions{
    29  		fast: Fast,
    30  		slow: Slow,
    31  	}
    32  	for _, opt := range opts {
    33  		opt(&optionsHolder)
    34  	}
    35  	switch t {
    36  	case TypeFast:
    37  		return optionsHolder.fast.Delay(i)
    38  	case TypeSlow:
    39  		return optionsHolder.slow.Delay(i)
    40  	default:
    41  		return 0
    42  	}
    43  }