internal/config/provider.go (37 lines of code) (raw):
package config
import (
"context"
"github.com/Azure/k6ctl/internal/target"
)
type configProvider[T any] struct {
name string
loader LoadAndValidateParams[T]
resolver ResolveConfig[T]
configInternalImpl
}
// Provide creates a config provider using the loader and resolver functions.
func Provide[T any](
name string,
loader LoadAndValidateParams[T],
resolver ResolveConfig[T],
) Provider {
return &configProvider[T]{
name: name,
loader: loader,
resolver: resolver,
}
}
var _ Provider = (*configProvider[any])(nil)
func (c *configProvider[T]) Name() string {
return c.name
}
func (c *configProvider[T]) Resolve(
ctx context.Context,
target target.Target,
userInput map[string]any,
) (string, error) {
validatedParams, err := c.loader(ctx, target, userInput)
if err != nil {
return "", err
}
return c.resolver(ctx, target, validatedParams)
}