update factory provider
All checks were successful
Go Action / goaction (pull_request) Successful in 56s
All checks were successful
Go Action / goaction (pull_request) Successful in 56s
This commit is contained in:
@@ -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)
|
||||
|
||||
10
factory.go
10
factory.go
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
31
provider/factory/provider.go
Normal file
31
provider/factory/provider.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user