Skip to content
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

feat(templates): add CollectionsKeyValueName to field.DataType #4131

Merged
merged 9 commits into from
May 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .github/workflows/test-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,4 @@ jobs:
install-mode: goinstall
args: --timeout 10m
github-token: ${{ secrets.github_token }}
skip-go-installation: true
Pantani marked this conversation as resolved.
Show resolved Hide resolved
skip-pkg-cache: true
skip-build-cache: true
skip-save-cache: true
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
- [#4110](https://github.com/ignite/cli/pull/4110) Scaffold a consumer chain with `interchain-security` v5.0.0-rc0.
- [#4111](https://github.com/ignite/cli/pull/4111) Remove vuex generation
- [#4117](https://github.com/ignite/cli/pull/4117), [#4125](https://github.com/ignite/cli/pull/4125) Support relative path when installing local plugins
- [#4131](https://github.com/ignite/cli/pull/4131) Support `bytes` as data type in the `scaffold` commands

### Changes

Expand Down
11 changes: 6 additions & 5 deletions ignite/templates/field/datatype/bool.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ import (

// DataBool bool data type definition.
var DataBool = DataType{
DataType: func(string) string { return "bool" },
DefaultTestValue: "false",
ValueLoop: "false",
ValueIndex: "false",
ValueInvalidIndex: "false",
DataType: func(string) string { return "bool" },
CollectionsKeyValueName: func(string) string { return "collections.BoolKey" },
DefaultTestValue: "false",
ValueLoop: "false",
ValueIndex: "false",
ValueInvalidIndex: "false",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("bool %s = %d", name, index)
},
Expand Down
36 changes: 36 additions & 0 deletions ignite/templates/field/datatype/bytes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package datatype

import (
"fmt"

"github.com/emicklei/proto"

"github.com/ignite/cli/v29/ignite/pkg/multiformatname"
"github.com/ignite/cli/v29/ignite/pkg/protoanalysis/protoutil"
)

// DataBytes is a string data type definition.
var DataBytes = DataType{
DataType: func(string) string { return "[]byte" },
CollectionsKeyValueName: func(string) string { return "collections.BytesKey" },
DefaultTestValue: "[]byte{1, 2, 3, 4, 5}",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("bytes %s = %d", name, index)
},
GenesisArgs: func(name multiformatname.Name, value int) string {
return fmt.Sprintf("%s: []byte(\"%d\"),\n", name.UpperCamel, value)
},
CLIArgs: func(name multiformatname.Name, _, prefix string, argIndex int) string {
return fmt.Sprintf("%s%s := []byte(args[%d])", prefix, name.UpperCamel, argIndex)
},
ToBytes: func(name string) string {
return name
},
ToString: func(name string) string {
return fmt.Sprintf("string(%s)", name)
},
ToProtoField: func(_, name string, index int) *proto.NormalField {
return protoutil.NewField(name, "bytes", index)
},
NonIndex: true,
}
10 changes: 6 additions & 4 deletions ignite/templates/field/datatype/coin.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ import (
var (
// DataCoin coin data type definition.
DataCoin = DataType{
DataType: func(string) string { return "sdk.Coin" },
DefaultTestValue: "10token",
DataType: func(string) string { return "sdk.Coin" },
CollectionsKeyValueName: func(string) string { return collectionValueComment },
DefaultTestValue: "10token",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("cosmos.base.v1beta1.Coin %s = %d [(gogoproto.nullable) = false]",
name, index)
Expand All @@ -38,8 +39,9 @@ var (

// DataCoinSlice is a coin array data type definition.
DataCoinSlice = DataType{
DataType: func(string) string { return "sdk.Coins" },
DefaultTestValue: "10token,20stake",
DataType: func(string) string { return "sdk.Coins" },
CollectionsKeyValueName: func(string) string { return collectionValueComment },
DefaultTestValue: "10token,20stake",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("repeated cosmos.base.v1beta1.Coin %s = %d [(gogoproto.nullable) = false]",
name, index)
Expand Down
5 changes: 3 additions & 2 deletions ignite/templates/field/datatype/custom.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ import (

// DataCustom is a custom data type definition.
var DataCustom = DataType{
DataType: func(datatype string) string { return fmt.Sprintf("*%s", datatype) },
DefaultTestValue: "null",
DataType: func(datatype string) string { return fmt.Sprintf("*%s", datatype) },
CollectionsKeyValueName: func(string) string { return collectionValueComment },
DefaultTestValue: "null",
ProtoType: func(datatype, name string, index int) string {
return fmt.Sprintf("%s %s = %d", datatype, name, index)
},
Expand Down
16 changes: 9 additions & 7 deletions ignite/templates/field/datatype/int.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import (
var (
// DataInt is an int data type definition.
DataInt = DataType{
DataType: func(string) string { return "int32" },
DefaultTestValue: "111",
ValueLoop: "int32(i)",
ValueIndex: "0",
ValueInvalidIndex: "100000",
DataType: func(string) string { return "int32" },
CollectionsKeyValueName: func(string) string { return "collections.Int32Key" },
DefaultTestValue: "111",
ValueLoop: "int32(i)",
ValueIndex: "0",
ValueInvalidIndex: "100000",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("int32 %s = %d", name, index)
},
Expand Down Expand Up @@ -45,8 +46,9 @@ var (

// DataIntSlice is an int array data type definition.
DataIntSlice = DataType{
DataType: func(string) string { return "[]int32" },
DefaultTestValue: "1,2,3,4,5",
DataType: func(string) string { return "[]int32" },
CollectionsKeyValueName: func(string) string { return collectionValueComment },
DefaultTestValue: "1,2,3,4,5",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("repeated int32 %s = %d", name, index)
},
Expand Down
18 changes: 10 additions & 8 deletions ignite/templates/field/datatype/string.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import (
var (
// DataString is a string data type definition.
DataString = DataType{
DataType: func(string) string { return "string" },
DefaultTestValue: "xyz",
ValueLoop: "strconv.Itoa(i)",
ValueIndex: "strconv.Itoa(0)",
ValueInvalidIndex: "strconv.Itoa(100000)",
DataType: func(string) string { return "string" },
CollectionsKeyValueName: func(string) string { return "collections.StringKey" },
DefaultTestValue: "xyz",
ValueLoop: "strconv.Itoa(i)",
ValueIndex: "strconv.Itoa(0)",
ValueInvalidIndex: "strconv.Itoa(100000)",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("string %s = %d", name, index)
},
Expand All @@ -39,8 +40,9 @@ var (

// DataStringSlice is a string array data type definition.
DataStringSlice = DataType{
DataType: func(string) string { return "[]string" },
DefaultTestValue: "abc,xyz",
DataType: func(string) string { return "[]string" },
CollectionsKeyValueName: func(string) string { return collectionValueComment },
DefaultTestValue: "abc,xyz",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("repeated string %s = %d", name, index)
},
Expand All @@ -52,9 +54,9 @@ var (
prefix, name.UpperCamel, argIndex)
},
GoCLIImports: []GoImport{{Name: "strings"}},
NonIndex: true,
ToProtoField: func(_, name string, index int) *proto.NormalField {
return protoutil.NewField(name, "string", index, protoutil.Repeated())
},
NonIndex: true,
}
)
34 changes: 20 additions & 14 deletions ignite/templates/field/datatype/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ const (
Coin Name = "coin"
// Coins represents the coin array type name.
Coins Name = "array.coin"
// Bytes represents the bytes type name.
Bytes Name = "bytes"
// Custom represents the custom type name.
Custom Name = Name(TypeCustom)

Expand All @@ -42,10 +44,13 @@ const (

// TypeCustom represents the string type name id.
TypeCustom = "customstarporttype"

collectionValueComment = "/* Add collection key value */"
)

// supportedTypes all support data types and definitions.
var supportedTypes = map[Name]DataType{
Bytes: DataBytes,
String: DataString,
StringSlice: DataStringSlice,
StringSliceAlias: DataStringSlice,
Expand All @@ -67,20 +72,21 @@ type Name string

// DataType represents the data types for code replacement.
type DataType struct {
DataType func(datatype string) string
ProtoType func(datatype, name string, index int) string
GenesisArgs func(name multiformatname.Name, value int) string
ProtoImports []string
GoCLIImports []GoImport
DefaultTestValue string
ValueLoop string
ValueIndex string
ValueInvalidIndex string
ToBytes func(name string) string
ToString func(name string) string
ToProtoField func(datatype, name string, index int) *proto.NormalField
CLIArgs func(name multiformatname.Name, datatype, prefix string, argIndex int) string
NonIndex bool
DataType func(datatype string) string
ProtoType func(datatype, name string, index int) string
CollectionsKeyValueName func(datatype string) string
GenesisArgs func(name multiformatname.Name, value int) string
ProtoImports []string
GoCLIImports []GoImport
DefaultTestValue string
ValueLoop string
ValueIndex string
ValueInvalidIndex string
ToBytes func(name string) string
ToString func(name string) string
ToProtoField func(datatype, name string, index int) *proto.NormalField
CLIArgs func(name multiformatname.Name, datatype, prefix string, argIndex int) string
NonIndex bool
}

// GoImport represents the go import repo name with the alias.
Expand Down
5 changes: 5 additions & 0 deletions ignite/templates/field/datatype/types_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ func TestIsSupportedType(t *testing.T) {
typename: datatype.Coins,
ok: true,
},
{
name: "bytes",
typename: datatype.Bytes,
ok: true,
},
{
name: "custom",
typename: datatype.Custom,
Expand Down
16 changes: 9 additions & 7 deletions ignite/templates/field/datatype/uint.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import (
var (
// DataUint uint data type definition.
DataUint = DataType{
DataType: func(string) string { return "uint64" },
DefaultTestValue: "111",
ValueLoop: "uint64(i)",
ValueIndex: "0",
ValueInvalidIndex: "100000",
DataType: func(string) string { return "uint64" },
CollectionsKeyValueName: func(string) string { return "collections.Uint64Key" },
DefaultTestValue: "111",
ValueLoop: "uint64(i)",
ValueIndex: "0",
ValueInvalidIndex: "100000",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("uint64 %s = %d", name, index)
},
Expand Down Expand Up @@ -45,8 +46,9 @@ var (

// DataUintSlice uint array data type definition.
DataUintSlice = DataType{
DataType: func(string) string { return "[]uint64" },
DefaultTestValue: "1,2,3,4,5",
DataType: func(string) string { return "[]uint64" },
CollectionsKeyValueName: func(string) string { return collectionValueComment },
DefaultTestValue: "1,2,3,4,5",
ProtoType: func(_, name string, index int) string {
return fmt.Sprintf("repeated uint64 %s = %d", name, index)
},
Expand Down
10 changes: 10 additions & 0 deletions ignite/templates/field/field.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,15 @@ func (f Field) ProtoType(index int) string {
return dt.ProtoType(f.Datatype, f.ProtoFieldName(), index)
}

// CollectionsKeyValueType returns the field collections key value type.
func (f Field) CollectionsKeyValueType() string {
dt, ok := datatype.IsSupportedType(f.DatatypeName)
if !ok {
panic(fmt.Sprintf("unknown type %s", f.DatatypeName))
}
return dt.CollectionsKeyValueName(f.Datatype)
}

// DefaultTestValue returns the Datatype value default.
func (f Field) DefaultTestValue() string {
dt, ok := datatype.IsSupportedType(f.DatatypeName)
Expand Down Expand Up @@ -96,6 +105,7 @@ func (f Field) GenesisArgs(value int) string {
}

// CLIArgs returns the Datatype CLI args.
// TODO(@julienrbrt): Once unused and fully replaced by AutoCLI, remove CLIArgs from DataType.
func (f Field) CLIArgs(prefix string, argIndex int) string {
dt, ok := datatype.IsSupportedType(f.DatatypeName)
if !ok {
Expand Down
29 changes: 1 addition & 28 deletions ignite/templates/typed/map/map.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
"github.com/ignite/cli/v29/ignite/pkg/protoanalysis/protoutil"
"github.com/ignite/cli/v29/ignite/pkg/xast"
"github.com/ignite/cli/v29/ignite/pkg/xgenny"
"github.com/ignite/cli/v29/ignite/templates/field"
"github.com/ignite/cli/v29/ignite/templates/field/datatype"
"github.com/ignite/cli/v29/ignite/templates/module"
"github.com/ignite/cli/v29/ignite/templates/typed"
Expand Down Expand Up @@ -143,7 +142,7 @@ func keeperModify(replacer placeholder.Replacer, opts *typed.Options) genny.RunF
typed.PlaceholderCollectionInstantiate,
opts.TypeName.UpperCamel,
opts.TypeName.LowerCamel,
dataTypeToCollectionKeyValue(opts.Index),
opts.Index.CollectionsKeyValueType(),
)
content = replacer.Replace(content, typed.PlaceholderCollectionInstantiate, replacementInstantiate)

Expand Down Expand Up @@ -728,29 +727,3 @@ func typesCodecModify(replacer placeholder.Replacer, opts *typed.Options) genny.
return r.File(newFile)
}
}

// dataTypeToCollectionKeyValue returns the date type of the collection value.
// TODO(@julienrbrt): extend support of dataTypeToCollectionKeyValue.
func dataTypeToCollectionKeyValue(f field.Field) string {
var collectionKeyValue string
switch f.DataType() {
case "string":
collectionKeyValue = "collections.StringKey"
case "int32":
collectionKeyValue = "collections.Int32Key"
case "int64":
collectionKeyValue = "collections.Int64Key"
case "uint32":
collectionKeyValue = "collections.Uint32Key"
case "uint64":
collectionKeyValue = "collections.Uint64Key"
case "byte":
collectionKeyValue = "collections.BytesKey"
case "bool":
collectionKeyValue = "collections.BoolKey"
default:
collectionKeyValue = "/* Add collection key value */"
}

return collectionKeyValue
}
Loading