irregular.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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) NewField(pref.FieldDescriptor) pref.Value {
  62. panic("invalid field descriptor")
  63. }
  64. func (m *message) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor {
  65. panic("invalid oneof descriptor")
  66. }
  67. func (m *message) GetUnknown() pref.RawFields { return nil }
  68. func (m *message) SetUnknown(pref.RawFields) { return }
  69. var fileDesc = func() pref.FileDescriptor {
  70. p := &descriptorpb.FileDescriptorProto{}
  71. if err := prototext.Unmarshal([]byte(descriptorText), p); err != nil {
  72. panic(err)
  73. }
  74. file, err := protodesc.NewFile(p, nil)
  75. if err != nil {
  76. panic(err)
  77. }
  78. return file
  79. }()
  80. func file_irregular_irregular_proto_init() { _ = fileDesc }
  81. const descriptorText = `
  82. name: "internal/testprotos/irregular/irregular.proto"
  83. package: "goproto.proto.thirdparty"
  84. message_type {
  85. name: "IrregularMessage"
  86. field {
  87. name: "s"
  88. number: 1
  89. label: LABEL_OPTIONAL
  90. type: TYPE_STRING
  91. json_name: "s"
  92. }
  93. }
  94. options {
  95. go_package: "google.golang.org/protobuf/internal/testprotos/irregular"
  96. }
  97. `