update factory provider
All checks were successful
Go Action / goaction (pull_request) Successful in 56s

This commit is contained in:
2025-12-30 22:53:06 +03:00
parent 6e1192772a
commit 382bd117c1
4 changed files with 41 additions and 8 deletions

View File

@@ -11,6 +11,7 @@ import (
"gitoa.ru/go-4devs/config"
"gitoa.ru/go-4devs/config/provider/arg"
"gitoa.ru/go-4devs/config/provider/env"
"gitoa.ru/go-4devs/config/provider/factory"
"gitoa.ru/go-4devs/config/provider/watcher"
"gitoa.ru/go-4devs/config/test"
)
@@ -127,7 +128,7 @@ func ExampleClient_Value_factory() {
config, err := config.New(
arg.New(),
config.Factory(func(ctx context.Context, cfg config.Provider) (config.Provider, error) {
factory.New("factory:env", func(ctx context.Context, cfg config.Provider) (config.Provider, error) {
val, err := cfg.Value(ctx, "env")
if err != nil {
return nil, fmt.Errorf("failed read config file:%w", err)

View File

@@ -10,11 +10,12 @@ import (
func WrapFactory(fn Factory, prov Provider) *WrapProvider {
return &WrapProvider{
factory: func(ctx context.Context) (Provider, error) {
return fn(ctx, prov)
return fn.Create(ctx, prov)
},
mu: sync.Mutex{},
done: 0,
provider: nil,
name: fn.Name(),
}
}
@@ -23,6 +24,7 @@ type WrapProvider struct {
done uint32
provider Provider
factory func(ctx context.Context) (Provider, error)
name string
}
func (p *WrapProvider) Watch(ctx context.Context, callback WatchCallback, path ...string) error {
@@ -56,11 +58,7 @@ func (p *WrapProvider) Value(ctx context.Context, path ...string) (Value, error)
}
func (p *WrapProvider) Name() string {
if err := p.init(context.Background()); err != nil {
return fmt.Sprintf("%T", p.provider)
}
return p.provider.Name()
return p.name
}
func (p *WrapProvider) Bind(ctx context.Context, data Variables) error {

View File

@@ -17,7 +17,10 @@ type WatchProvider interface {
Watch(ctx context.Context, callback WatchCallback, path ...string) error
}
type Factory func(ctx context.Context, cfg Provider) (Provider, error)
type Factory interface {
Name() string
Create(ctx context.Context, prov Provider) (Provider, error)
}
type Option interface {
Name() string

View File

@@ -0,0 +1,31 @@
package factory
import (
"context"
"gitoa.ru/go-4devs/config"
)
var _ config.Factory = New("", nil)
type Create func(ctx context.Context, prov config.Provider) (config.Provider, error)
func New(name string, fn Create) Factory {
return Factory{
create: fn,
name: name,
}
}
type Factory struct {
create Create
name string
}
func (f Factory) Name() string {
return f.name
}
func (f Factory) Create(ctx context.Context, prov config.Provider) (config.Provider, error) {
return f.create(ctx, prov)
}