irregular.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. "reflect"
  7. "google.golang.org/protobuf/encoding/prototext"
  8. "google.golang.org/protobuf/reflect/protodesc"
  9. pref "google.golang.org/protobuf/reflect/protoreflect"
  10. "google.golang.org/protobuf/types/descriptorpb"
  11. )
  12. type IrregularMessage struct {
  13. set bool
  14. value string
  15. }
  16. func (m *IrregularMessage) ProtoReflect() pref.Message { return (*message)(m) }
  17. type message IrregularMessage
  18. func (m *message) Descriptor() pref.MessageDescriptor { return fileDesc.Messages().Get(0) }
  19. func (m *message) Type() pref.MessageType { return m }
  20. func (m *message) New() pref.Message { return &message{} }
  21. func (m *message) Zero() pref.Message { return (*message)(nil) }
  22. func (m *message) GoType() reflect.Type { return reflect.TypeOf(&message{}) }
  23. func (m *message) Interface() pref.ProtoMessage { return (*IrregularMessage)(m) }
  24. var fieldDescS = fileDesc.Messages().Get(0).Fields().Get(0)
  25. func (m *message) Range(f func(pref.FieldDescriptor, pref.Value) bool) {
  26. if m.set {
  27. f(fieldDescS, pref.ValueOf(m.value))
  28. }
  29. }
  30. func (m *message) Has(fd pref.FieldDescriptor) bool {
  31. if fd == fieldDescS {
  32. return m.set
  33. }
  34. panic("invalid field descriptor")
  35. }
  36. func (m *message) Clear(fd pref.FieldDescriptor) {
  37. if fd == fieldDescS {
  38. m.value = ""
  39. m.set = false
  40. return
  41. }
  42. panic("invalid field descriptor")
  43. }
  44. func (m *message) Get(fd pref.FieldDescriptor) pref.Value {
  45. if fd == fieldDescS {
  46. return pref.ValueOf(m.value)
  47. }
  48. panic("invalid field descriptor")
  49. }
  50. func (m *message) Set(fd pref.FieldDescriptor, v pref.Value) {
  51. if fd == fieldDescS {
  52. m.value = v.String()
  53. m.set = true
  54. return
  55. }
  56. panic("invalid field descriptor")
  57. }
  58. func (m *message) Mutable(pref.FieldDescriptor) pref.Value {
  59. panic("invalid field descriptor")
  60. }
  61. func (m *message) NewMessage(pref.FieldDescriptor) pref.Message {
  62. panic("invalid field descriptor")
  63. }
  64. func (m *message) NewField(pref.FieldDescriptor) pref.Value {
  65. panic("invalid field descriptor")
  66. }
  67. func (m *message) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor {
  68. panic("invalid oneof descriptor")
  69. }
  70. func (m *message) GetUnknown() pref.RawFields { return nil }
  71. func (m *message) SetUnknown(pref.RawFields) { return }
  72. var fileDesc = func() pref.FileDescriptor {
  73. p := &descriptorpb.FileDescriptorProto{}
  74. if err := prototext.Unmarshal([]byte(descriptorText), p); err != nil {
  75. panic(err)
  76. }
  77. file, err := protodesc.NewFile(p, nil)
  78. if err != nil {
  79. panic(err)
  80. }
  81. return file
  82. }()
  83. func file_irregular_irregular_proto_init() { _ = fileDesc }
  84. const descriptorText = `
  85. name: "internal/testprotos/irregular/irregular.proto"
  86. package: "goproto.proto.thirdparty"
  87. message_type {
  88. name: "IrregularMessage"
  89. field {
  90. name: "s"
  91. number: 1
  92. label: LABEL_OPTIONAL
  93. type: TYPE_STRING
  94. json_name: "s"
  95. }
  96. }
  97. options {
  98. go_package: "google.golang.org/protobuf/internal/testprotos/irregular"
  99. }
  100. `