convertpb.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. } else {
  38. base.Fatalf("%s", newError(fmt.Sprintf("failed to load config: %s", configFiles)).Base(err))
  39. return
  40. }
  41. }
  42. bytew, err := proto.Marshal(config)
  43. if err != nil {
  44. base.Fatalf("%s", newError("failed to marshal config").Base(err))
  45. return
  46. }
  47. io.Copy(os.Stdout, bytes.NewReader(bytew))
  48. },
  49. }