* chore: rename container to cosmossdk.io/container * fix imports * add replace for container * remove replace * add replace * fix replace * fix replace * fix replace * fix replace * fix replace * try to fix replace * rename to depinject * rename to depinject * do not use vanity URL for now * try fix tests * try fix tests * try fix tests * build -> inject * build -> inject * go mod tidy * fix dep vulnerability * fix dep vulnerability * fix Dockerfile for liveness-test * fix codeql error * try to solve dependency review * try to solve dependency review * go mod tidy * try to fix tests * another try
35 lines
977 B
Go
35 lines
977 B
Go
package appmodule
|
|
|
|
import (
|
|
"cosmossdk.io/core/internal"
|
|
"github.com/cosmos/cosmos-sdk/depinject"
|
|
)
|
|
|
|
// Option is a functional option for implementing modules.
|
|
type Option interface {
|
|
apply(*internal.ModuleInitializer) error
|
|
}
|
|
|
|
type funcOption func(initializer *internal.ModuleInitializer) error
|
|
|
|
func (f funcOption) apply(initializer *internal.ModuleInitializer) error {
|
|
return f(initializer)
|
|
}
|
|
|
|
// Provide registers providers with the dependency injection system that will be
|
|
// run within the module scope. See github.com/cosmos/cosmos-sdk/depinject v1.0.0-alpha.3 for
|
|
// documentation on the dependency injection system.
|
|
func Provide(providers ...interface{}) Option {
|
|
return funcOption(func(initializer *internal.ModuleInitializer) error {
|
|
for _, provider := range providers {
|
|
desc, err := depinject.ExtractProviderDescriptor(provider)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
initializer.Providers = append(initializer.Providers, desc)
|
|
}
|
|
return nil
|
|
})
|
|
}
|