provider.go
provider.go - Overview
-
Overview This file defines interfaces and functions for creating and managing providers in a generic way. It includes definitions for
Provider
,ProviderFactory
, and related helper functions to instantiate providers from a named map of factories. -
Detailed Documentation
Type Provider
type Provider = any
- Purpose: Type alias for
any
, representing a generic provider.
Type NewProviderFunc
type NewProviderFunc[P Provider, C Config] func(context.Context, ProviderSettings, C) (P, error)
- Purpose: Defines a function signature for creating a new provider.
- Parameters:
context.Context
: Context for the function call.ProviderSettings
: Settings related to the provider.C
: Configuration for the provider.
- Returns:
P
: The created provider.error
: An error if the provider creation fails.
- Parameters:
Interface ProviderFactory
type ProviderFactory[P Provider, C Config] interface {
Named
New(context.Context, ProviderSettings, C) (P, error)
}
- Purpose: Defines an interface for a factory that creates providers.
- Methods:
Named
: Interface to get the name of the factory.New
: Creates a new provider.- Parameters:
context.Context
: Context for the function call.ProviderSettings
: Settings related to the provider.C
: Configuration for the provider.
- Returns:
P
: The created provider.error
: An error if the provider creation fails.
- Parameters:
- Methods:
Type providerFactory
type providerFactory[P Provider, C Config] struct {
name Name
newProviderFunc NewProviderFunc[P, C]
}
- Purpose: Concrete implementation of the
ProviderFactory
interface.- Fields:
name
: The name of the factory.newProviderFunc
: The function used to create new providers.
- Fields:
Function (*providerFactory).Name
func (factory *providerFactory[P, C]) Name() Name {
return factory.name
}
- Purpose: Returns the name of the provider factory.
- Returns:
Name
: The name of the factory.
- Returns:
Function (*providerFactory).New
func (factory *providerFactory[P, C]) New(ctx context.Context, settings ProviderSettings, config C) (p P, err error) {
provider, err := factory.newProviderFunc(ctx, settings, config)
if err != nil {
return
}
p = provider
return
}
- Purpose: Creates a new provider using the factory's
newProviderFunc
.- Parameters:
ctx
: Context for the function call.settings
: Settings related to the provider.config
: Configuration for the provider.
- Returns:
P
: The created provider.error
: An error if the provider creation fails.
- Parameters:
Function NewProviderFactory
func NewProviderFactory[P Provider, C Config](name Name, newProviderFunc NewProviderFunc[P, C]) ProviderFactory[P, C] {
return &providerFactory[P, C]{
name: name,
newProviderFunc: newProviderFunc,
}
}
- Purpose: Creates a new
ProviderFactory
.- Parameters:
name
: The name of the factory.newProviderFunc
: The function used to create new providers.
- Returns:
ProviderFactory[P, C]
: The created provider factory.
- Parameters:
Function NewProviderFromNamedMap
func NewProviderFromNamedMap[P Provider, C Config](ctx context.Context, settings ProviderSettings, config C, factories NamedMap[ProviderFactory[P, C]], key string) (p P, err error) {
providerFactory, err := factories.Get(key)
if err != nil {
return
}
provider, err := providerFactory.New(ctx, settings, config)
if err != nil {
return
}
p = provider
return
}
- Purpose: Creates a new provider from a named map of factories based on the input key.
- Parameters:
ctx
: Context for the function call.settings
: Settings related to the provider.config
: Configuration for the provider.factories
: A named map ofProviderFactory
.key
: The key to lookup the factory in the map.
- Returns:
P
: The created provider.error
: An error if the factory is not found or if provider creation fails.
- Parameters:
Include in Getting Started: NO