refactor!: require exported app wiring providers (#13292)
This commit is contained in:
+28
-31
@@ -8,6 +8,7 @@ import (
|
||||
runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1"
|
||||
"cosmossdk.io/core/appmodule"
|
||||
"cosmossdk.io/depinject"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
@@ -23,29 +24,24 @@ type BaseAppOption func(*baseapp.BaseApp)
|
||||
// IsManyPerContainerType indicates that this is a depinject.ManyPerContainerType.
|
||||
func (b BaseAppOption) IsManyPerContainerType() {}
|
||||
|
||||
// appWrapper is used to pass around an instance of *App internally between
|
||||
// runtime dependency inject providers that is partially constructed (no
|
||||
// baseapp yet).
|
||||
type appWrapper *App
|
||||
|
||||
func init() {
|
||||
appmodule.Register(&runtimev1alpha1.Module{},
|
||||
appmodule.Provide(
|
||||
provideCodecs,
|
||||
provideAppBuilder,
|
||||
provideKVStoreKey,
|
||||
provideTransientStoreKey,
|
||||
provideMemoryStoreKey,
|
||||
provideDeliverTx,
|
||||
ProvideCodecs,
|
||||
ProvideKVStoreKey,
|
||||
ProvideTransientStoreKey,
|
||||
ProvideMemoryStoreKey,
|
||||
ProvideDeliverTx,
|
||||
),
|
||||
appmodule.Invoke(SetupAppBuilder),
|
||||
)
|
||||
}
|
||||
|
||||
func provideCodecs(moduleBasics map[string]AppModuleBasicWrapper) (
|
||||
func ProvideCodecs(moduleBasics map[string]AppModuleBasicWrapper) (
|
||||
codectypes.InterfaceRegistry,
|
||||
codec.Codec,
|
||||
*codec.LegacyAmino,
|
||||
appWrapper,
|
||||
*AppBuilder,
|
||||
codec.ProtoCodecMarshaler,
|
||||
*baseapp.MsgServiceRouter,
|
||||
) {
|
||||
@@ -64,13 +60,15 @@ func provideCodecs(moduleBasics map[string]AppModuleBasicWrapper) (
|
||||
|
||||
cdc := codec.NewProtoCodec(interfaceRegistry)
|
||||
msgServiceRouter := baseapp.NewMsgServiceRouter()
|
||||
app := &App{
|
||||
storeKeys: nil,
|
||||
interfaceRegistry: interfaceRegistry,
|
||||
cdc: cdc,
|
||||
amino: amino,
|
||||
basicManager: basicManager,
|
||||
msgServiceRouter: msgServiceRouter,
|
||||
app := &AppBuilder{
|
||||
&App{
|
||||
storeKeys: nil,
|
||||
interfaceRegistry: interfaceRegistry,
|
||||
cdc: cdc,
|
||||
amino: amino,
|
||||
basicManager: basicManager,
|
||||
msgServiceRouter: msgServiceRouter,
|
||||
},
|
||||
}
|
||||
|
||||
return interfaceRegistry, cdc, amino, app, cdc, msgServiceRouter
|
||||
@@ -80,25 +78,24 @@ type appInputs struct {
|
||||
depinject.In
|
||||
|
||||
Config *runtimev1alpha1.Module
|
||||
App appWrapper
|
||||
AppBuilder *AppBuilder
|
||||
Modules map[string]AppModuleWrapper
|
||||
BaseAppOptions []BaseAppOption
|
||||
}
|
||||
|
||||
func provideAppBuilder(inputs appInputs) *AppBuilder {
|
||||
func SetupAppBuilder(inputs appInputs) {
|
||||
mm := &module.Manager{Modules: map[string]module.AppModule{}}
|
||||
for name, wrapper := range inputs.Modules {
|
||||
mm.Modules[name] = wrapper.AppModule
|
||||
}
|
||||
app := inputs.App
|
||||
app := inputs.AppBuilder.app
|
||||
app.baseAppOptions = inputs.BaseAppOptions
|
||||
app.config = inputs.Config
|
||||
app.ModuleManager = mm
|
||||
return &AppBuilder{app: app}
|
||||
}
|
||||
|
||||
func registerStoreKey(wrapper appWrapper, key storetypes.StoreKey) {
|
||||
wrapper.storeKeys = append(wrapper.storeKeys, key)
|
||||
func registerStoreKey(wrapper *AppBuilder, key storetypes.StoreKey) {
|
||||
wrapper.app.storeKeys = append(wrapper.app.storeKeys, key)
|
||||
}
|
||||
|
||||
func storeKeyOverride(config *runtimev1alpha1.Module, moduleName string) *runtimev1alpha1.StoreKeyConfig {
|
||||
@@ -110,7 +107,7 @@ func storeKeyOverride(config *runtimev1alpha1.Module, moduleName string) *runtim
|
||||
return nil
|
||||
}
|
||||
|
||||
func provideKVStoreKey(config *runtimev1alpha1.Module, key depinject.ModuleKey, app appWrapper) *storetypes.KVStoreKey {
|
||||
func ProvideKVStoreKey(config *runtimev1alpha1.Module, key depinject.ModuleKey, app *AppBuilder) *storetypes.KVStoreKey {
|
||||
override := storeKeyOverride(config, key.Name())
|
||||
|
||||
var storeKeyName string
|
||||
@@ -125,20 +122,20 @@ func provideKVStoreKey(config *runtimev1alpha1.Module, key depinject.ModuleKey,
|
||||
return storeKey
|
||||
}
|
||||
|
||||
func provideTransientStoreKey(key depinject.ModuleKey, app appWrapper) *storetypes.TransientStoreKey {
|
||||
func ProvideTransientStoreKey(key depinject.ModuleKey, app *AppBuilder) *storetypes.TransientStoreKey {
|
||||
storeKey := storetypes.NewTransientStoreKey(fmt.Sprintf("transient:%s", key.Name()))
|
||||
registerStoreKey(app, storeKey)
|
||||
return storeKey
|
||||
}
|
||||
|
||||
func provideMemoryStoreKey(key depinject.ModuleKey, app appWrapper) *storetypes.MemoryStoreKey {
|
||||
func ProvideMemoryStoreKey(key depinject.ModuleKey, app *AppBuilder) *storetypes.MemoryStoreKey {
|
||||
storeKey := storetypes.NewMemoryStoreKey(fmt.Sprintf("memory:%s", key.Name()))
|
||||
registerStoreKey(app, storeKey)
|
||||
return storeKey
|
||||
}
|
||||
|
||||
func provideDeliverTx(app appWrapper) func(abci.RequestDeliverTx) abci.ResponseDeliverTx {
|
||||
func ProvideDeliverTx(appBuilder *AppBuilder) func(abci.RequestDeliverTx) abci.ResponseDeliverTx {
|
||||
return func(tx abci.RequestDeliverTx) abci.ResponseDeliverTx {
|
||||
return app.BaseApp.DeliverTx(tx)
|
||||
return appBuilder.app.BaseApp.DeliverTx(tx)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user