jsonpb.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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/v4"
  8. "github.com/v2fly/v2ray-core/v4/common"
  9. "github.com/v2fly/v2ray-core/v4/common/buf"
  10. "github.com/v2fly/v2ray-core/v4/common/cmdarg"
  11. "github.com/v2fly/v2ray-core/v4/common/serial"
  12. )
  13. //go:generate go run github.com/v2fly/v2ray-core/v4/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 io.Reader:
  52. data, err := buf.ReadAllToBytes(v)
  53. if err != nil {
  54. return nil, err
  55. }
  56. return loadJsonPb(bytes.NewReader(data))
  57. default:
  58. return nil, newError("unknow type")
  59. }
  60. },
  61. }))
  62. }