reversepb.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package engineering
  2. import (
  3. "bytes"
  4. "flag"
  5. "io"
  6. "os"
  7. "github.com/golang/protobuf/proto"
  8. core "github.com/v2fly/v2ray-core/v5"
  9. "github.com/v2fly/v2ray-core/v5/infra/conf/jsonpb"
  10. "github.com/v2fly/v2ray-core/v5/infra/conf/v2jsonpb"
  11. "github.com/v2fly/v2ray-core/v5/main/commands/base"
  12. )
  13. var cmdReversePb = &base.Command{
  14. UsageLine: "{{.Exec}} engineering reversepb [-f format]",
  15. Flag: func() flag.FlagSet {
  16. fs := flag.NewFlagSet("", flag.ExitOnError)
  17. configFormat = fs.String("f", "v2jsonpb", "")
  18. return *fs
  19. }(),
  20. Run: func(cmd *base.Command, args []string) {
  21. cmd.Flag.Parse(args)
  22. configIn := bytes.NewBuffer(nil)
  23. io.Copy(configIn, os.Stdin)
  24. var conf core.Config
  25. if err := proto.Unmarshal(configIn.Bytes(), &conf); err != nil {
  26. base.Fatalf("%s", err)
  27. }
  28. switch *configFormat {
  29. case "jsonpb":
  30. if err := jsonpb.DumpJSONPb(&conf, os.Stdout); err != nil {
  31. base.Fatalf("%s", err)
  32. }
  33. case "v2jsonpb":
  34. if value, err := v2jsonpb.DumpV2JsonPb(&conf); err != nil {
  35. base.Fatalf("%s", err)
  36. } else {
  37. io.Copy(os.Stdout, bytes.NewReader(value))
  38. }
  39. }
  40. },
  41. }