feat: new command pbf

This commit is contained in:
Young Xu 2024-04-06 11:53:48 +08:00
parent 323617361d
commit 7e8dc13992
2 changed files with 55 additions and 0 deletions

View File

@ -30,6 +30,7 @@ func init() {
rootCmd.AddCommand(bootstrap.AddServiceCommand())
rootCmd.AddCommand(bootstrap.GenerateProtoFile())
rootCmd.AddCommand(bootstrap.InjectProtoFile())
rootCmd.AddCommand(bootstrap.AddProtoFormat())
}
func main() {

54
coco_proto_format.go Normal file
View File

@ -0,0 +1,54 @@
package bootstrap
import (
"bytes"
"github.com/emicklei/proto"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"gitter.top/sync/proto-contrib/pkg/protofmt"
"os"
)
func AddProtoFormat() *cobra.Command {
var protoFile string
cmd := &cobra.Command{
Use: "pbf",
Short: "protobuf format",
PreRun: func(_ *cobra.Command, args []string) {
if protoFile == "" && len(args) != 0 {
protoFile = args[0]
}
stat, err := os.Stat(protoFile)
if err != nil {
logrus.Fatalf("read proto file %s failed: %v", protoFile, err)
return
}
if stat.IsDir() {
logrus.Fatalf("proto file can not be directory")
return
}
},
Run: func(cmd *cobra.Command, args []string) {
file, err := os.Open(protoFile)
if err != nil {
logrus.Errorf("format proto file %s failed: %v", protoFile, err)
return
}
buf := new(bytes.Buffer)
parser := proto.NewParser(file)
parser.Filename(protoFile)
def, err := parser.Parse()
if err != nil {
logrus.Errorf("parse proto file %s failed: %v", protoFile, err)
return
}
protofmt.NewFormatter(buf, " ").Format(def)
if err := os.WriteFile(protoFile, buf.Bytes(), os.ModePerm); err != nil {
logrus.Errorf("write proto file %s failed: %v", protoFile, err)
return
}
},
}
cmd.Flags().StringVar(&protoFile, "path", "", "proto file path")
return cmd
}