any2.go 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. package v2jsonpb
  2. import (
  3. "github.com/golang/protobuf/jsonpb"
  4. "google.golang.org/protobuf/proto"
  5. "google.golang.org/protobuf/reflect/protoreflect"
  6. "google.golang.org/protobuf/types/dynamicpb"
  7. "google.golang.org/protobuf/types/known/anypb"
  8. )
  9. type resolver2 struct {
  10. backgroundResolver jsonpb.AnyResolver
  11. }
  12. func (r resolver2) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) {
  13. panic("implement me")
  14. }
  15. func (r resolver2) FindMessageByURL(url string) (protoreflect.MessageType, error) {
  16. msg, err := r.backgroundResolver.Resolve(url)
  17. if err != nil {
  18. return nil, err
  19. }
  20. return msg.(proto.Message).ProtoReflect().Type(), nil
  21. }
  22. func (r resolver2) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) {
  23. panic("implement me")
  24. }
  25. func (r resolver2) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) {
  26. panic("implement me")
  27. }
  28. type V2JsonProtobufAnyTypeDescriptor struct {
  29. protoreflect.MessageDescriptor
  30. }
  31. func (v V2JsonProtobufAnyTypeDescriptor) FullName() protoreflect.FullName {
  32. return "org.v2fly.SynAny"
  33. }
  34. func (v V2JsonProtobufAnyTypeDescriptor) Fields() protoreflect.FieldDescriptors {
  35. panic("implement me")
  36. }
  37. type V2JsonProtobufAnyType struct {
  38. originalType protoreflect.MessageType
  39. syntheticDescriptor V2JsonProtobufAnyTypeDescriptor
  40. }
  41. func (v V2JsonProtobufAnyType) New() protoreflect.Message {
  42. return dynamicpb.NewMessage(v.syntheticDescriptor)
  43. }
  44. func (v V2JsonProtobufAnyType) Zero() protoreflect.Message {
  45. return dynamicpb.NewMessage(v.syntheticDescriptor)
  46. }
  47. func (v V2JsonProtobufAnyType) Descriptor() protoreflect.MessageDescriptor {
  48. return v.syntheticDescriptor
  49. }
  50. type V2JsonProtobufFollowerFieldDescriptor struct {
  51. protoreflect.FieldDescriptor
  52. }
  53. type V2JsonProtobufAnyTypeFieldDescriptor struct {
  54. protoreflect.FieldDescriptor
  55. }
  56. func (v V2JsonProtobufAnyTypeFieldDescriptor) JSONName() string {
  57. return "type"
  58. }
  59. func (v V2JsonProtobufAnyTypeFieldDescriptor) TextName() string {
  60. return "type"
  61. }
  62. type V2JsonProtobufAnyValueField struct {
  63. protoreflect.FieldDescriptor
  64. name string
  65. }
  66. func (v *V2JsonProtobufAnyValueField) Kind() protoreflect.Kind {
  67. return protoreflect.MessageKind
  68. }
  69. func (v *V2JsonProtobufAnyValueField) JSONName() string {
  70. return v.name
  71. }
  72. func (v *V2JsonProtobufAnyValueField) TextName() string {
  73. return v.name
  74. }
  75. type V2JsonProtobufAnyFollower struct {
  76. protoreflect.Message
  77. }
  78. func (v *V2JsonProtobufAnyFollower) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
  79. v.Message.Range(func(descriptor protoreflect.FieldDescriptor, value protoreflect.Value) bool {
  80. return followValue(descriptor, value, f)
  81. })
  82. }
  83. type V2JsonProtobufFollower struct {
  84. protoreflect.Message
  85. }
  86. type V2JsonProtobufListFollower struct {
  87. protoreflect.List
  88. }
  89. func (v V2JsonProtobufListFollower) Len() int {
  90. return v.List.Len()
  91. }
  92. func (v V2JsonProtobufListFollower) Get(i int) protoreflect.Value {
  93. return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{v.List.Get(i).Message()})
  94. }
  95. func (v V2JsonProtobufListFollower) Set(i int, value protoreflect.Value) {
  96. panic("implement me")
  97. }
  98. func (v V2JsonProtobufListFollower) Append(value protoreflect.Value) {
  99. panic("implement me")
  100. }
  101. func (v V2JsonProtobufListFollower) AppendMutable() protoreflect.Value {
  102. panic("implement me")
  103. }
  104. func (v V2JsonProtobufListFollower) Truncate(i int) {
  105. panic("implement me")
  106. }
  107. func (v V2JsonProtobufListFollower) NewElement() protoreflect.Value {
  108. panic("implement me")
  109. }
  110. func (v V2JsonProtobufListFollower) IsValid() bool {
  111. panic("implement me")
  112. }
  113. type V2JsonProtobufMapFollower struct {
  114. protoreflect.Map
  115. }
  116. func (v V2JsonProtobufMapFollower) Len() int {
  117. panic("implement me")
  118. }
  119. func (v V2JsonProtobufMapFollower) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) {
  120. panic("implement me")
  121. }
  122. func (v V2JsonProtobufMapFollower) Has(key protoreflect.MapKey) bool {
  123. panic("implement me")
  124. }
  125. func (v V2JsonProtobufMapFollower) Clear(key protoreflect.MapKey) {
  126. panic("implement me")
  127. }
  128. func (v V2JsonProtobufMapFollower) Get(key protoreflect.MapKey) protoreflect.Value {
  129. panic("implement me")
  130. }
  131. func (v V2JsonProtobufMapFollower) Set(key protoreflect.MapKey, value protoreflect.Value) {
  132. panic("implement me")
  133. }
  134. func (v V2JsonProtobufMapFollower) Mutable(key protoreflect.MapKey) protoreflect.Value {
  135. panic("implement me")
  136. }
  137. func (v V2JsonProtobufMapFollower) NewValue() protoreflect.Value {
  138. panic("implement me")
  139. }
  140. func (v V2JsonProtobufMapFollower) IsValid() bool {
  141. panic("implement me")
  142. }
  143. func (v *V2JsonProtobufFollower) Type() protoreflect.MessageType {
  144. panic("implement me")
  145. }
  146. func (v *V2JsonProtobufFollower) New() protoreflect.Message {
  147. panic("implement me")
  148. }
  149. func (v *V2JsonProtobufFollower) Interface() protoreflect.ProtoMessage {
  150. panic("implement me")
  151. }
  152. func (v *V2JsonProtobufFollower) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
  153. v.Message.Range(func(descriptor protoreflect.FieldDescriptor, value protoreflect.Value) bool {
  154. name := descriptor.FullName()
  155. fullname := v.Message.Descriptor().FullName()
  156. if fullname == "google.protobuf.Any" {
  157. switch name {
  158. case "google.protobuf.Any.type_url":
  159. fd := V2JsonProtobufAnyTypeFieldDescriptor{descriptor}
  160. return f(fd, value)
  161. case "google.protobuf.Any.value":
  162. url := v.Message.Get(v.Message.Descriptor().Fields().ByName("type_url")).String()
  163. fd := &V2JsonProtobufAnyValueField{descriptor, url}
  164. follow := &V2JsonProtobufAnyFollower{v.Message}
  165. return f(fd, protoreflect.ValueOfMessage(follow))
  166. default:
  167. panic("unexpected any value")
  168. }
  169. }
  170. return followValue(descriptor, value, f)
  171. })
  172. }
  173. func followValue(descriptor protoreflect.FieldDescriptor, value protoreflect.Value, f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) bool {
  174. fd := V2JsonProtobufFollowerFieldDescriptor{descriptor}
  175. if descriptor.Kind() == protoreflect.MessageKind {
  176. if descriptor.IsList() {
  177. value2 := protoreflect.ValueOfList(V2JsonProtobufListFollower{value.List()})
  178. return f(fd, value2)
  179. }
  180. if descriptor.IsMap() {
  181. value2 := protoreflect.ValueOfMap(V2JsonProtobufMapFollower{value.Map()})
  182. return f(fd, value2)
  183. }
  184. value2 := protoreflect.ValueOfMessage(&V2JsonProtobufFollower{value.Message()})
  185. return f(fd, value2)
  186. }
  187. return f(fd, value)
  188. }
  189. func (v *V2JsonProtobufFollower) Has(descriptor protoreflect.FieldDescriptor) bool {
  190. panic("implement me")
  191. }
  192. func (v *V2JsonProtobufFollower) Clear(descriptor protoreflect.FieldDescriptor) {
  193. panic("implement me")
  194. }
  195. func (v *V2JsonProtobufFollower) Set(descriptor protoreflect.FieldDescriptor, value protoreflect.Value) {
  196. panic("implement me")
  197. }
  198. func (v *V2JsonProtobufFollower) Mutable(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
  199. panic("implement me")
  200. }
  201. func (v *V2JsonProtobufFollower) NewField(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
  202. panic("implement me")
  203. }
  204. func (v *V2JsonProtobufFollower) WhichOneof(descriptor protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
  205. panic("implement me")
  206. }
  207. func (v *V2JsonProtobufFollower) GetUnknown() protoreflect.RawFields {
  208. panic("implement me")
  209. }
  210. func (v *V2JsonProtobufFollower) SetUnknown(fields protoreflect.RawFields) {
  211. panic("implement me")
  212. }
  213. func (v *V2JsonProtobufFollower) IsValid() bool {
  214. panic("implement me")
  215. }
  216. func (v *V2JsonProtobufFollower) ProtoReflect() protoreflect.Message {
  217. return v
  218. }
  219. func (v *V2JsonProtobufFollower) Descriptor() protoreflect.MessageDescriptor {
  220. fullname := v.Message.Descriptor().FullName()
  221. if fullname == "google.protobuf.Any" {
  222. //desc := &V2JsonProtobufAnyType{v.Message.Type(), V2JsonProtobufAnyTypeDescriptor{(&anypb.Any{}).ProtoReflect().Descriptor()}}
  223. desc := &V2JsonProtobufAnyTypeDescriptor{(&anypb.Any{}).ProtoReflect().Descriptor()}
  224. return desc
  225. }
  226. return v.Message.Descriptor()
  227. }
  228. func (v *V2JsonProtobufFollower) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
  229. panic("implement me")
  230. }