extensions.go 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. package protoext
  2. import (
  3. "github.com/golang/protobuf/proto"
  4. "google.golang.org/protobuf/reflect/protoreflect"
  5. "google.golang.org/protobuf/types/descriptorpb"
  6. )
  7. //go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen
  8. func GetMessageOptions(msgDesc protoreflect.MessageDescriptor) (*MessageOpt, error) {
  9. msgOpt := msgDesc.Options().(*descriptorpb.MessageOptions)
  10. var V2MessageOption *MessageOpt
  11. if msgOptRet, err := proto.GetExtension(msgOpt, E_MessageOpt); err != nil {
  12. return nil, newError("unable to parse extension from message").Base(err)
  13. } else {
  14. V2MessageOption = msgOptRet.(*MessageOpt)
  15. }
  16. return V2MessageOption, nil
  17. }
  18. func GetFieldOptions(fieldDesc protoreflect.FieldDescriptor) (*FieldOpt, error) {
  19. fieldOpt := fieldDesc.Options().(*descriptorpb.FieldOptions)
  20. var V2FieldOption *FieldOpt
  21. if msgOptRet, err := proto.GetExtension(fieldOpt, E_FieldOpt); err != nil {
  22. return nil, newError("unable to parse extension from message").Base(err)
  23. } else {
  24. V2FieldOption = msgOptRet.(*FieldOpt)
  25. }
  26. return V2FieldOption, nil
  27. }