mirror of https://github.com/status-im/go-waku.git
37 lines
790 B
Go
37 lines
790 B
Go
|
package try
|
||
|
|
||
|
import "errors"
|
||
|
|
||
|
// MaxRetries is the maximum number of retries before bailing.
|
||
|
var MaxRetries = 10
|
||
|
|
||
|
var errMaxRetriesReached = errors.New("exceeded retry limit")
|
||
|
|
||
|
// Func represents functions that can be retried.
|
||
|
type Func func(attempt int) (retry bool, err error)
|
||
|
|
||
|
// Do keeps trying the function until the second argument
|
||
|
// returns false, or no error is returned.
|
||
|
func Do(fn Func) error {
|
||
|
var err error
|
||
|
var cont bool
|
||
|
attempt := 1
|
||
|
for {
|
||
|
cont, err = fn(attempt)
|
||
|
if !cont || err == nil {
|
||
|
break
|
||
|
}
|
||
|
attempt++
|
||
|
if attempt > MaxRetries {
|
||
|
return errMaxRetriesReached
|
||
|
}
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// IsMaxRetries checks whether the error is due to hitting the
|
||
|
// maximum number of retries or not.
|
||
|
func IsMaxRetries(err error) bool {
|
||
|
return err == errMaxRetriesReached
|
||
|
}
|