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 }