Providers
Providers are typed resources stored on engines and factories.
Use them to attach external clients or custom resources without global state.
Create keys with generics:
1
2
| var httpClientKey = puppetest.NewProviderKey[http.Client]()
var taggedKey = puppetest.NewTaggedProviderKey[sql.DB]("readonly")
|
Set and retrieve from an engine:
1
2
3
4
5
6
7
8
| var cfgKey = puppetest.NewProviderKey[MyConfig]()
cfg := &MyConfig{BaseURL: "http://localhost"}
_ = puppetest.SetProvider(engine, cfgKey, cfg, func(ctx context.Context, c *MyConfig) error {
return nil
})
cfgPtr, ok := puppetest.Provider[MyConfig](engine, cfgKey)
|
Factory providers are stored once, then optionally bound to each newly-created engine.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| var factoryProviderKey = puppetest.NewProviderKey[MyProvider]()
var engineProviderKey = puppetest.NewProviderKey[MyProvider]()
err := puppetest.RegisterFactoryProvider(
factory,
factoryProviderKey,
provider,
func(ctx context.Context, e *puppetest.Engine, v *MyProvider) error {
return puppetest.SetProvider(e, engineProviderKey, v, nil)
},
func(ctx context.Context, v *MyProvider) error {
return v.Close(ctx)
},
)
|
Any type implementing ProviderResolver can use:
1
| v, ok := puppetest.ResolveProvider[T](resolver, key)
|
This is used internally by both engine and factory retrieval helpers.