jsonpb.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package jsonpb
  2. import (
  3. "bytes"
  4. "io"
  5. "github.com/golang/protobuf/jsonpb"
  6. "github.com/golang/protobuf/proto"
  7. core "github.com/v2fly/v2ray-core/v5"
  8. "github.com/v2fly/v2ray-core/v5/common"
  9. "github.com/v2fly/v2ray-core/v5/common/buf"
  10. "github.com/v2fly/v2ray-core/v5/common/cmdarg"
  11. "github.com/v2fly/v2ray-core/v5/common/serial"
  12. )
  13. //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
  14. func loadJSONPB(data io.Reader) (*core.Config, error) {
  15. coreconf := &core.Config{}
  16. jsonpbloader := &jsonpb.Unmarshaler{AnyResolver: serial.GetResolver()}
  17. err := jsonpbloader.Unmarshal(data, coreconf)
  18. if err != nil {
  19. return nil, err
  20. }
  21. return coreconf, nil
  22. }
  23. func dumpJSONPb(config proto.Message, w io.Writer) error {
  24. jsonpbdumper := &jsonpb.Marshaler{AnyResolver: serial.GetResolver()}
  25. err := jsonpbdumper.Marshal(w, config)
  26. if err != nil {
  27. return err
  28. }
  29. return nil
  30. }
  31. func DumpJSONPb(config proto.Message, w io.Writer) error {
  32. return dumpJSONPb(config, w)
  33. }
  34. const FormatProtobufJSONPB = "jsonpb"
  35. func init() {
  36. common.Must(core.RegisterConfigLoader(&core.ConfigFormat{
  37. Name: []string{FormatProtobufJSONPB},
  38. Extension: []string{".pb.json", ".pbjson"},
  39. Loader: func(input interface{}) (*core.Config, error) {
  40. switch v := input.(type) {
  41. case string:
  42. r, err := cmdarg.LoadArg(v)
  43. if err != nil {
  44. return nil, err
  45. }
  46. data, err := buf.ReadAllToBytes(r)
  47. if err != nil {
  48. return nil, err
  49. }
  50. return loadJSONPB(bytes.NewReader(data))
  51. case []byte:
  52. return loadJSONPB(bytes.NewReader(v))
  53. case io.Reader:
  54. data, err := buf.ReadAllToBytes(v)
  55. if err != nil {
  56. return nil, err
  57. }
  58. return loadJSONPB(bytes.NewReader(data))
  59. default:
  60. return nil, newError("unknown type")
  61. }
  62. },
  63. }))
  64. }