cosmos-sdk/core/internal/testpb/modules.go
Facundo Medica c17f38d224
refactor!: rename container to cosmossdk.io/depinject (#12020)
* 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
2022-05-27 19:34:48 +02:00

99 lines
1.8 KiB
Go

package testpb
import (
"fmt"
"io"
"sort"
"cosmossdk.io/core/appmodule"
"github.com/cosmos/cosmos-sdk/depinject"
)
func init() {
appmodule.Register(&TestRuntimeModule{},
appmodule.Provide(provideRuntimeState, provideStoreKey, provideApp),
)
appmodule.Register(&TestModuleA{},
appmodule.Provide(provideModuleA),
)
appmodule.Register(&TestModuleB{},
appmodule.Provide(provideModuleB),
)
}
func provideRuntimeState() *runtimeState {
return &runtimeState{}
}
func provideStoreKey(key depinject.ModuleKey, state *runtimeState) StoreKey {
sk := StoreKey{name: key.Name()}
state.storeKeys = append(state.storeKeys, sk)
return sk
}
func provideApp(state *runtimeState, handlers map[string]Handler) App {
return func(w io.Writer) {
for _, key := range state.storeKeys {
_, _ = fmt.Fprintf(w, "got store key %s\n", key.name)
}
var modNames []string
for modName := range handlers {
modNames = append(modNames, modName)
}
sort.Strings(modNames)
for _, name := range modNames {
_, _ = fmt.Fprintf(w, "running module handler %s\n", name)
_, _ = fmt.Fprintf(w, "result: %s\n", handlers[name].DoSomething())
}
}
}
type App func(writer io.Writer)
type runtimeState struct {
storeKeys []StoreKey
}
type StoreKey struct{ name string }
type Handler struct {
DoSomething func() string
}
func (h Handler) IsOnePerModuleType() {}
func provideModuleA(key StoreKey) (KeeperA, Handler) {
return keeperA{key: key}, Handler{DoSomething: func() string {
return "hello"
}}
}
type keeperA struct {
key StoreKey
}
type KeeperA interface {
Foo()
}
func (k keeperA) Foo() {}
func provideModuleB(key StoreKey, a KeeperA) (KeeperB, Handler) {
return keeperB{key: key, a: a}, Handler{
DoSomething: func() string {
return "goodbye"
},
}
}
type keeperB struct {
key StoreKey
a KeeperA
}
type KeeperB interface{}