Files
kouiz/internal/setup/helper.go
2025-06-15 23:22:54 +02:00

35 lines
637 B
Go

package setup
import (
"context"
"sync"
"forge.cadoles.com/wpetit/kouiz/internal/config"
"github.com/pkg/errors"
)
func createFromConfigOnce[T any](factory func(ctx context.Context, conf *config.Config) (T, error)) func(ctx context.Context, conf *config.Config) (T, error) {
var (
once sync.Once
service T
onceErr error
)
return func(ctx context.Context, conf *config.Config) (T, error) {
once.Do(func() {
srv, err := factory(ctx, conf)
if err != nil {
onceErr = errors.WithStack(err)
return
}
service = srv
})
if onceErr != nil {
return *new(T), onceErr
}
return service, nil
}
}