services.go 876 B

12345678910111213141516171819202122232425262728293031
  1. package v4
  2. import (
  3. "encoding/json"
  4. "google.golang.org/protobuf/types/known/anypb"
  5. "github.com/golang/protobuf/jsonpb"
  6. "github.com/jhump/protoreflect/desc"
  7. "github.com/jhump/protoreflect/dynamic"
  8. "github.com/v2fly/v2ray-core/v4/common/serial"
  9. )
  10. func (c *Config) BuildServices(service map[string]*json.RawMessage) ([]*anypb.Any, error) {
  11. var ret []*anypb.Any
  12. for k, v := range service {
  13. message, err := desc.LoadMessageDescriptor(k)
  14. if err != nil || message == nil {
  15. return nil, newError("Cannot find service", k, "").Base(err)
  16. }
  17. serviceConfig := dynamic.NewMessage(message)
  18. if err := serviceConfig.UnmarshalJSONPB(&jsonpb.Unmarshaler{AllowUnknownFields: false}, *v); err != nil {
  19. return nil, newError("Cannot interpret service configure file", k, "").Base(err)
  20. }
  21. ret = append(ret, serial.ToTypedMessage(serviceConfig))
  22. }
  23. return ret, nil
  24. }