irregular.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // Copyright 2019 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package irregular
  5. import (
  6. "google.golang.org/protobuf/encoding/prototext"
  7. "google.golang.org/protobuf/reflect/protodesc"
  8. pref "google.golang.org/protobuf/reflect/protoreflect"
  9. "google.golang.org/protobuf/types/descriptorpb"
  10. )
  11. type IrregularMessage struct {
  12. set bool
  13. value string
  14. }
  15. func (m *IrregularMessage) ProtoReflect() pref.Message { return (*message)(m) }
  16. type message IrregularMessage
  17. func (m *message) Descriptor() pref.MessageDescriptor { return descriptor.Messages().Get(0) }
  18. func (m *message) New() pref.Message { return &message{} }
  19. func (m *message) Interface() pref.ProtoMessage { return (*IrregularMessage)(m) }
  20. var fieldDescS = descriptor.Messages().Get(0).Fields().Get(0)
  21. func (m *message) Range(f func(pref.FieldDescriptor, pref.Value) bool) {
  22. if m.set {
  23. f(fieldDescS, pref.ValueOf(m.value))
  24. }
  25. }
  26. func (m *message) Has(fd pref.FieldDescriptor) bool {
  27. if fd == fieldDescS {
  28. return m.set
  29. }
  30. panic("invalid field descriptor")
  31. }
  32. func (m *message) Clear(fd pref.FieldDescriptor) {
  33. if fd == fieldDescS {
  34. m.value = ""
  35. m.set = false
  36. return
  37. }
  38. panic("invalid field descriptor")
  39. }
  40. func (m *message) Get(fd pref.FieldDescriptor) pref.Value {
  41. if fd == fieldDescS {
  42. return pref.ValueOf(m.value)
  43. }
  44. panic("invalid field descriptor")
  45. }
  46. func (m *message) Set(fd pref.FieldDescriptor, v pref.Value) {
  47. if fd == fieldDescS {
  48. m.value = v.String()
  49. m.set = true
  50. return
  51. }
  52. panic("invalid field descriptor")
  53. }
  54. func (m *message) Mutable(pref.FieldDescriptor) pref.Value {
  55. panic("invalid field descriptor")
  56. }
  57. func (m *message) NewMessage(pref.FieldDescriptor) pref.Message {
  58. panic("invalid field descriptor")
  59. }
  60. func (m *message) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor {
  61. panic("invalid oneof descriptor")
  62. }
  63. func (m *message) GetUnknown() pref.RawFields { return nil }
  64. func (m *message) SetUnknown(pref.RawFields) { return }
  65. var descriptor = func() pref.FileDescriptor {
  66. p := &descriptorpb.FileDescriptorProto{}
  67. if err := prototext.Unmarshal([]byte(descriptorText), p); err != nil {
  68. panic(err)
  69. }
  70. file, err := protodesc.NewFile(p, nil)
  71. if err != nil {
  72. panic(err)
  73. }
  74. return file
  75. }()
  76. func file_irregular_irregular_proto_init() { _ = descriptor }
  77. const descriptorText = `
  78. name: "internal/testprotos/irregular/irregular.proto"
  79. package: "goproto.proto.thirdparty"
  80. message_type {
  81. name: "IrregularMessage"
  82. field {
  83. name: "s"
  84. number: 1
  85. label: LABEL_OPTIONAL
  86. type: TYPE_STRING
  87. json_name: "s"
  88. }
  89. }
  90. options {
  91. go_package: "google.golang.org/protobuf/internal/testprotos/irregular"
  92. }
  93. `