convertpb.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package engineering
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "os"
  7. "google.golang.org/protobuf/proto"
  8. core "github.com/v2fly/v2ray-core/v4"
  9. "github.com/v2fly/v2ray-core/v4/common/cmdarg"
  10. "github.com/v2fly/v2ray-core/v4/main/commands/base"
  11. )
  12. var (
  13. configFiles cmdarg.Arg
  14. configDirs cmdarg.Arg
  15. configFormat *string
  16. configDirRecursively *bool
  17. )
  18. func setConfigFlags(cmd *base.Command) {
  19. configFormat = cmd.Flag.String("format", core.FormatAuto, "")
  20. configDirRecursively = cmd.Flag.Bool("r", false, "")
  21. cmd.Flag.Var(&configFiles, "config", "")
  22. cmd.Flag.Var(&configFiles, "c", "")
  23. cmd.Flag.Var(&configDirs, "confdir", "")
  24. cmd.Flag.Var(&configDirs, "d", "")
  25. }
  26. var cmdConvertPb = &base.Command{
  27. UsageLine: "{{.Exec}} engineering convertpb [-c config.json] [-d dir]",
  28. CustomFlags: true,
  29. Run: func(cmd *base.Command, args []string) {
  30. setConfigFlags(cmd)
  31. cmd.Flag.Parse(args)
  32. config, err := core.LoadConfig(*configFormat, configFiles)
  33. if err != nil {
  34. if len(configFiles) == 0 {
  35. base.Fatalf("%s", newError("failed to load config").Base(err))
  36. return
  37. }
  38. base.Fatalf("%s", newError(fmt.Sprintf("failed to load config: %s", configFiles)).Base(err))
  39. return
  40. }
  41. bytew, err := proto.Marshal(config)
  42. if err != nil {
  43. base.Fatalf("%s", newError("failed to marshal config").Base(err))
  44. return
  45. }
  46. io.Copy(os.Stdout, bytes.NewReader(bytew))
  47. },
  48. }