signoz/pkg/factory/provider.go
Vibhu Pandey 0cf9003e3a
feat(.): initialize all factories (#6844)
### Summary

feat(.): initialize all factories

#### Related Issues / PR's

Removed all redundant commits of https://github.com/SigNoz/signoz/pull/6843
Closes https://github.com/SigNoz/signoz/pull/6782
2025-01-20 17:45:33 +05:30

59 lines
1.5 KiB
Go

package factory
import (
"context"
)
type Provider = any
// NewProviderFunc is a function that creates a new Provider.
type NewProviderFunc[P Provider, C Config] func(context.Context, ProviderSettings, C) (P, error)
type ProviderFactory[P Provider, C Config] interface {
Named
New(context.Context, ProviderSettings, C) (P, error)
}
type providerFactory[P Provider, C Config] struct {
name Name
newProviderFunc NewProviderFunc[P, C]
}
func (factory *providerFactory[P, C]) Name() Name {
return factory.name
}
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
}
// NewProviderFactory creates a new provider factory.
func NewProviderFactory[P Provider, C Config](name Name, newProviderFunc NewProviderFunc[P, C]) ProviderFactory[P, C] {
return &providerFactory[P, C]{
name: name,
newProviderFunc: newProviderFunc,
}
}
// NewProviderFromNamedMap creates a new provider from a factory based on the input key.
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
}