8000 feat: scaffold transactions using MsgServer convention by lumtis · Pull Request #725 · ignite/cli · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

feat: scaffold transactions using MsgServer convention #725

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Feb 5, 2021
14 changes: 14 additions & 0 deletions integration/cmd_type_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,13 @@ func TestGenerateAnAppWithStargateWithTypeAndVerify(t *testing.T) {
ExecShouldError(),
))

env.Must(env.Exec("create a type with legacy scaffold",
step.NewSteps(step.New(
step.Exec("starport", "type", "participant", "email", "--legacy"),
step.Workdir(path),
)),
))

env.Must(env.Exec("should prevent creating an existing type",
step.NewSteps(step.New(
step.Exec("starport", "type", "user", "email"),
Expand Down Expand Up @@ -222,6 +229,13 @@ func TestCreateTypeInCustomModuleWithStargate(t *testing.T) {
)),
))

env.Must(env.Exec("create a type with legacy scaffold",
step.NewSteps(step.New(
step.Exec("starport", "type", "participant", "email", "--legacy", "--module", "example"),
step.Workdir(path),
)),
))

env.Must(env.Exec("create a type in the app's module",
step.NewSteps(step.New(
step.Exec("starport", "type", "user", "email"),
Expand Down
13 changes: 11 additions & 2 deletions starport/interface/cli/starport/cmd/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

const (
moduleFlag string = "module"
legacyFlag string = "legacy"
)

// NewType command creates a new type command to scaffold types.
Expand All @@ -23,16 +24,24 @@ func NewType() *cobra.Command {
addSdkVersionFlag(c)

c.Flags().String(moduleFlag, "", "Module to add the type into. Default: app's main module")
c.Flags().Bool(legacyFlag, false, "Scaffold the type without generating MsgServer service")

return c
}

func typeHandler(cmd *cobra.Command, args []string) error {
// Get the module to add the type into
module, _ := cmd.Flags().GetString(moduleFlag)
module, err := cmd.Flags().GetString(moduleFlag)
if err != nil {
return err
}
legacy, err := cmd.Flags().GetBool(legacyFlag)
if err != nil {
return err
}

sc := scaffolder.New(appPath)
if err := sc.AddType(module, args[0], args[1:]...); err != nil {
if err := sc.AddType(legacy, module, args[0], args[1:]...); err != nil {
return err
}
fmt.Printf("\n🎉 Created a type `%[1]v`.\n\n", args[0])
Expand Down
28 changes: 26 additions & 2 deletions starport/services/scaffolder/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const (
)

// AddType adds a new type stype to scaffolded app by using optional type fields.
func (s *Scaffolder) AddType(moduleName string, stype string, fields ...string) error {
func (s *Scaffolder) AddType(legacy bool, moduleName string, stype string, fields ...string) error {
version, err := s.version()
if err != nil {
return err
Expand Down Expand Up @@ -109,11 +109,22 @@ func (s *Scaffolder) AddType(moduleName string, stype string, fields ...string)
OwnerName: owner(path.RawPath),
TypeName: stype,
Fields: tfields,
Legacy: legacy,
}
)
// generate depending on the version
if majorVersion == cosmosver.Launchpad {
g, err = typed.NewLaunchpad(opts)
} else {
// check if the msgServer convention is used
var msgServerDefined bool
msgServerDefined, err = isMsgServerDefined(s.path, moduleName)
if err != nil {
return err
}
if !msgServerDefined {
opts.Legacy = true
}
g, err = typed.NewStargate(opts)
}
if err != nil {
Expand Down Expand Up @@ -166,8 +177,21 @@ func isTypeCreated(appPath, moduleName, typeName string) (isCreated bool, err er
return
}

func isGoReservedWord(name string) bool {
// isMsgServerDefined checks if the module uses the MsgServer convention for transactions
// this is checked by verifying the existence of the tx.proto file
func isMsgServerDefined(appPath, moduleName string) (bool, error) {
txProto, err := filepath.Abs(filepath.Join(appPath, "proto", moduleName, "tx.proto"))
if err != nil {
return false, err
}

if _, err := os.Stat(txProto); os.IsNotExist(err) {
return false, nil
}
return true, err
}

func isGoReservedWord(name string) bool {
// Check keyword or literal
if token.Lookup(name).IsKeyword() {
return true
Expand Down
13 changes: 13 additions & 0 deletions starport/templates/app/stargate/proto/{{appName}}/tx.proto.plush
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
syntax = "proto3";
package <%= nodash(OwnerName) %>.<%= AppName %>.<%= AppName %>;

// this line is used by starport scaffolding # proto/tx/import

option go_package = "<%= ModulePath %>/x/<%= AppName %>/types";

// Msg defines the Msg service.
service Msg {
// this line is used by starport scaffolding # proto/tx/rpc
}

// this line is used by starport scaffolding # proto/tx/message
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (

// NewHandler ...
func NewHandler(k keeper.Keeper) sdk.Handler {
// this line is used by starport scaffolding # handler/msgServer

return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
ctx = ctx.WithEventManager(sdk.NewEventManager())

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package keeper

import (
"<%= ModulePath %>/x/<%= AppName %>/types"
)

type msgServer struct {
Keeper
}

// NewMsgServerImpl returns an implementation of the MsgServer interface
// for the provided Keeper.
func NewMsgServerImpl(keeper Keeper) types.MsgServer {
return &msgServer{Keeper: keeper}
}

var _ types.MsgServer = msgServer{}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
syntax = "proto3";
package <%= nodash(ownerName) %>.<%= appName %>.<%= moduleName %>;

// this line is used by starport scaffolding # proto/tx/import

option go_package = "<%= modulePath %>/x/<%= moduleName %>/types";

// Msg defines the Msg service.
service Msg {
// this line is used by starport scaffolding # proto/tx/rpc
}

// this line is used by starport scaffolding # proto/tx/message
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (

// NewHandler ...
func NewHandler(k keeper.Keeper) sdk.Handler {
// this line is used by starport scaffolding # handler/msgServer

return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
ctx = ctx.WithEventManager(sdk.NewEventManager())

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package keeper

import (
"<%= modulePath %>/x/<%= moduleName %>/types"
)

type msgServer struct {
Keeper
}

// NewMsgServerImpl returns an implementation of the MsgServer interface
// for the provided Keeper.
func NewMsgServerImpl(keeper Keeper) types.MsgServer {
return &msgServer{Keeper: keeper}
}

var _ types.MsgServer = msgServer{}
3 changes: 1 addition & 2 deletions starport/templates/typed/new_launchpad.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"strings"

"github.com/gobuffalo/genny"
"github.com/tendermint/starport/starport/pkg/cosmosver"
)

type typedLaunchpad struct {
Expand All @@ -25,7 +24,7 @@ func NewLaunchpad(opts *Options) (*genny.Generator, error) {
g.RunFn(t.keeperQuerierModify(opts))
g.RunFn(t.clientRestRestModify(opts))
g.RunFn(t.frontendSrcStoreAppModify(opts))
return g, box(cosmosver.Launchpad, opts, g)
return g, box(launchpadTemplate, opts, g)
}

func (t *typedLaunchpad) handlerModify(opts *Options) genny.RunFn {
Expand Down
Loading
0