mirror of
https://github.com/luxfi/sdk.git
synced 2026-10-30 15:19:23 +00:00
Lux Partners Limited is not the entity behind this work. Every place the old name stood — copyright lines, site footers, brand config, legal and compliance text — now names the company that actually holds it. lux.fund is the exception and is not renamed to match: that site belongs to Lux Assets Management LLC, a different company, and it says so. Two kinds of line were left for a person rather than rewritten. A dated news item recording that Lux Partners Limited was established in the Isle of Man is a historical fact, and renaming it would falsify the record. And a sentence asserting that the company is domiciled in the Isle of Man is a claim about a jurisdiction, not a name — an Inc or an LLC is not an Isle of Man company, so swapping the name there would assert something untrue. Co-authored-by: Hanzo Dev <[email protected]>
54 lines
1.0 KiB
Go
54 lines
1.0 KiB
Go
// Copyright (C) 2025, Lux Industries Inc All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package evm
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func retry[T any](
|
|
fn func() (T, error),
|
|
maxAttempts int,
|
|
retryInterval time.Duration,
|
|
) (T, error) {
|
|
const defaultRetryInterval = 2 * time.Second
|
|
if retryInterval == 0 {
|
|
retryInterval = defaultRetryInterval
|
|
}
|
|
var (
|
|
result T
|
|
cumErr error
|
|
)
|
|
for attempt := 0; attempt < maxAttempts; attempt++ {
|
|
var err error
|
|
result, err = fn()
|
|
if err == nil {
|
|
return result, nil
|
|
}
|
|
cumErr = errors.Join(cumErr, err)
|
|
time.Sleep(retryInterval)
|
|
}
|
|
return result, fmt.Errorf(
|
|
"maximum retry attempts %d reached: cumulated err = %w",
|
|
maxAttempts,
|
|
cumErr,
|
|
)
|
|
}
|
|
|
|
func retryWithContextGen[T any](
|
|
ctxGen func() (context.Context, context.CancelFunc),
|
|
fn func(context.Context) (T, error),
|
|
maxAttempts int,
|
|
retryInterval time.Duration,
|
|
) (T, error) {
|
|
return retry(func() (T, error) {
|
|
ctx, cancel := ctxGen()
|
|
defer cancel()
|
|
return fn(ctx)
|
|
}, maxAttempts, retryInterval)
|
|
}
|