message_deprecated.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // Copyright 2018 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 impl
  5. import (
  6. "fmt"
  7. pref "google.golang.org/protobuf/reflect/protoreflect"
  8. )
  9. // TODO: Remove this file.
  10. // TODO: Remove this.
  11. func (m *messageReflectWrapper) Type() pref.MessageType {
  12. return m.mi.PBType
  13. }
  14. // TODO: Remove this.
  15. func (m *messageReflectWrapper) KnownFields() pref.KnownFields {
  16. m.mi.init()
  17. return (*knownFields)(m)
  18. }
  19. // TODO: Remove this.
  20. func (m *messageReflectWrapper) UnknownFields() pref.UnknownFields {
  21. m.mi.init()
  22. return m.mi.unknownFields((*messageDataType)(m))
  23. }
  24. // TODO: Remove this.
  25. type knownFields messageDataType
  26. func (fs *knownFields) Len() (cnt int) {
  27. for _, fi := range fs.mi.fields {
  28. if fi.has(fs.p) {
  29. cnt++
  30. }
  31. }
  32. return cnt + fs.extensionFields().Len()
  33. }
  34. func (fs *knownFields) Has(n pref.FieldNumber) bool {
  35. if fi := fs.mi.fields[n]; fi != nil {
  36. return fi.has(fs.p)
  37. }
  38. return fs.extensionFields().Has(n)
  39. }
  40. func (fs *knownFields) Get(n pref.FieldNumber) pref.Value {
  41. if fi := fs.mi.fields[n]; fi != nil {
  42. if !fi.has(fs.p) && isComposite(fi.fieldDesc) {
  43. if fi.newMessage != nil {
  44. return pref.Value{}
  45. }
  46. if !fs.p.IsNil() {
  47. return fi.mutable(fs.p)
  48. }
  49. }
  50. return fi.get(fs.p)
  51. }
  52. return fs.extensionFields().Get(n)
  53. }
  54. func (fs *knownFields) Set(n pref.FieldNumber, v pref.Value) {
  55. if fi := fs.mi.fields[n]; fi != nil {
  56. fi.set(fs.p, v)
  57. return
  58. }
  59. if fs.mi.PBType.Descriptor().ExtensionRanges().Has(n) {
  60. fs.extensionFields().Set(n, v)
  61. return
  62. }
  63. panic(fmt.Sprintf("invalid field: %d", n))
  64. }
  65. func (fs *knownFields) Clear(n pref.FieldNumber) {
  66. if fi := fs.mi.fields[n]; fi != nil {
  67. fi.clear(fs.p)
  68. return
  69. }
  70. if fs.mi.PBType.Descriptor().ExtensionRanges().Has(n) {
  71. fs.extensionFields().Clear(n)
  72. return
  73. }
  74. }
  75. func (fs *knownFields) WhichOneof(s pref.Name) pref.FieldNumber {
  76. if oi := fs.mi.oneofs[s]; oi != nil {
  77. return oi.which(fs.p)
  78. }
  79. return 0
  80. }
  81. func (fs *knownFields) Range(f func(pref.FieldNumber, pref.Value) bool) {
  82. for n, fi := range fs.mi.fields {
  83. if fi.has(fs.p) {
  84. if !f(n, fi.get(fs.p)) {
  85. return
  86. }
  87. }
  88. }
  89. fs.extensionFields().Range(f)
  90. }
  91. func (fs *knownFields) NewMessage(n pref.FieldNumber) pref.Message {
  92. if fi := fs.mi.fields[n]; fi != nil {
  93. return fi.newMessage()
  94. }
  95. if fs.mi.PBType.Descriptor().ExtensionRanges().Has(n) {
  96. return fs.extensionFields().NewMessage(n)
  97. }
  98. panic(fmt.Sprintf("invalid field: %d", n))
  99. }
  100. func (fs *knownFields) ExtensionTypes() pref.ExtensionFieldTypes {
  101. return fs.extensionFields().ExtensionTypes()
  102. }
  103. func (fs *knownFields) extensionFields() pref.KnownFields {
  104. return fs.mi.extensionFields((*messageDataType)(fs))
  105. }
  106. // TODO: Remove this.
  107. type emptyUnknownFields struct{}
  108. func (emptyUnknownFields) Len() int { return 0 }
  109. func (emptyUnknownFields) Get(pref.FieldNumber) pref.RawFields { return nil }
  110. func (emptyUnknownFields) Set(pref.FieldNumber, pref.RawFields) { return } // noop
  111. func (emptyUnknownFields) Range(func(pref.FieldNumber, pref.RawFields) bool) { return }
  112. func (emptyUnknownFields) IsSupported() bool { return false }
  113. // TODO: Remove this.
  114. type emptyExtensionFields struct{}
  115. func (emptyExtensionFields) Len() int { return 0 }
  116. func (emptyExtensionFields) Has(pref.FieldNumber) bool { return false }
  117. func (emptyExtensionFields) Get(pref.FieldNumber) pref.Value { return pref.Value{} }
  118. func (emptyExtensionFields) Set(pref.FieldNumber, pref.Value) { panic("extensions not supported") }
  119. func (emptyExtensionFields) Clear(pref.FieldNumber) { return } // noop
  120. func (emptyExtensionFields) WhichOneof(pref.Name) pref.FieldNumber { return 0 }
  121. func (emptyExtensionFields) Range(func(pref.FieldNumber, pref.Value) bool) { return }
  122. func (emptyExtensionFields) NewMessage(pref.FieldNumber) pref.Message {
  123. panic("extensions not supported")
  124. }
  125. func (emptyExtensionFields) ExtensionTypes() pref.ExtensionFieldTypes { return emptyExtensionTypes{} }
  126. // TODO: Remove this.
  127. type emptyExtensionTypes struct{}
  128. func (emptyExtensionTypes) Len() int { return 0 }
  129. func (emptyExtensionTypes) Register(pref.ExtensionType) { panic("extensions not supported") }
  130. func (emptyExtensionTypes) Remove(pref.ExtensionType) { return } // noop
  131. func (emptyExtensionTypes) ByNumber(pref.FieldNumber) pref.ExtensionType { return nil }
  132. func (emptyExtensionTypes) ByName(pref.FullName) pref.ExtensionType { return nil }
  133. func (emptyExtensionTypes) Range(func(pref.ExtensionType) bool) { return }