github.com/yoogoc/kratos-scaffold@v0.0.0-20240402032722-a538b3c18955/cmd/proto.go (about)

     1  package cmd
     2  
     3  import (
     4  	"github.com/iancoleman/strcase"
     5  	"github.com/spf13/cobra"
     6  	"github.com/yoogoc/kratos-scaffold/generator"
     7  	"github.com/yoogoc/kratos-scaffold/pkg/field"
     8  	"github.com/yoogoc/kratos-scaffold/pkg/util"
     9  )
    10  
    11  func newProtoCmd() *cobra.Command {
    12  	proto := generator.NewProto(settings)
    13  	var protoCmd = &cobra.Command{
    14  		Use:   "proto [NAME]",
    15  		Short: "proto generate req and res model, crud service and xx.pb.go,xx_grpc.pb.go,[xx_http.pb.go].",
    16  		Long: `proto generate req and res model, crud service and xx.pb.go,xx_grpc.pb.go,[xx_http.pb.go].
    17  kratos-scaffold user -n user id:int64:eq,in name:string:contains age:int32:gte,lte --grpc --http`,
    18  		FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true},
    19  		RunE: func(cmd *cobra.Command, args []string) error {
    20  			return runProto(proto, args)
    21  		},
    22  	}
    23  
    24  	addProtoFlags(protoCmd, proto)
    25  	return protoCmd
    26  }
    27  
    28  func addProtoFlags(protoCmd *cobra.Command, proto *generator.Proto) {
    29  	protoCmd.PersistentFlags().BoolVarP(&proto.GenHttp, "http", "", false, "generate xx.http.pb.go")
    30  }
    31  
    32  func runProto(proto *generator.Proto, args []string) error {
    33  	modelName := args[0]
    34  
    35  	proto.Name = util.Singular(strcase.ToCamel(modelName))
    36  	if fs, err := field.ParseFields(args[1:]); err != nil {
    37  		return err
    38  	} else {
    39  		proto.Fields = fs
    40  	}
    41  
    42  	err := proto.Generate()
    43  	return err
    44  }