waku-org/go-waku

View on GitHub
waku/try/try.go

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
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
}