adapt.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /*
  2. *
  3. * Copyright 2023 gRPC authors.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. package reflection
  19. import (
  20. v1reflectiongrpc "google.golang.org/grpc/reflection/grpc_reflection_v1"
  21. v1reflectionpb "google.golang.org/grpc/reflection/grpc_reflection_v1"
  22. v1alphareflectiongrpc "google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
  23. v1alphareflectionpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
  24. )
  25. // asV1Alpha returns an implementation of the v1alpha version of the reflection
  26. // interface that delegates all calls to the given v1 version.
  27. func asV1Alpha(svr v1reflectiongrpc.ServerReflectionServer) v1alphareflectiongrpc.ServerReflectionServer {
  28. return v1AlphaServerImpl{svr: svr}
  29. }
  30. type v1AlphaServerImpl struct {
  31. svr v1reflectiongrpc.ServerReflectionServer
  32. }
  33. func (s v1AlphaServerImpl) ServerReflectionInfo(stream v1alphareflectiongrpc.ServerReflection_ServerReflectionInfoServer) error {
  34. return s.svr.ServerReflectionInfo(v1AlphaServerStreamAdapter{stream})
  35. }
  36. type v1AlphaServerStreamAdapter struct {
  37. v1alphareflectiongrpc.ServerReflection_ServerReflectionInfoServer
  38. }
  39. func (s v1AlphaServerStreamAdapter) Send(response *v1reflectionpb.ServerReflectionResponse) error {
  40. return s.ServerReflection_ServerReflectionInfoServer.Send(v1ToV1AlphaResponse(response))
  41. }
  42. func (s v1AlphaServerStreamAdapter) Recv() (*v1reflectionpb.ServerReflectionRequest, error) {
  43. resp, err := s.ServerReflection_ServerReflectionInfoServer.Recv()
  44. if err != nil {
  45. return nil, err
  46. }
  47. return v1AlphaToV1Request(resp), nil
  48. }
  49. func v1ToV1AlphaResponse(v1 *v1reflectionpb.ServerReflectionResponse) *v1alphareflectionpb.ServerReflectionResponse {
  50. var v1alpha v1alphareflectionpb.ServerReflectionResponse
  51. v1alpha.ValidHost = v1.ValidHost
  52. if v1.OriginalRequest != nil {
  53. v1alpha.OriginalRequest = v1ToV1AlphaRequest(v1.OriginalRequest)
  54. }
  55. switch mr := v1.MessageResponse.(type) {
  56. case *v1reflectionpb.ServerReflectionResponse_FileDescriptorResponse:
  57. if mr != nil {
  58. v1alpha.MessageResponse = &v1alphareflectionpb.ServerReflectionResponse_FileDescriptorResponse{
  59. FileDescriptorResponse: &v1alphareflectionpb.FileDescriptorResponse{
  60. FileDescriptorProto: mr.FileDescriptorResponse.GetFileDescriptorProto(),
  61. },
  62. }
  63. }
  64. case *v1reflectionpb.ServerReflectionResponse_AllExtensionNumbersResponse:
  65. if mr != nil {
  66. v1alpha.MessageResponse = &v1alphareflectionpb.ServerReflectionResponse_AllExtensionNumbersResponse{
  67. AllExtensionNumbersResponse: &v1alphareflectionpb.ExtensionNumberResponse{
  68. BaseTypeName: mr.AllExtensionNumbersResponse.GetBaseTypeName(),
  69. ExtensionNumber: mr.AllExtensionNumbersResponse.GetExtensionNumber(),
  70. },
  71. }
  72. }
  73. case *v1reflectionpb.ServerReflectionResponse_ListServicesResponse:
  74. if mr != nil {
  75. svcs := make([]*v1alphareflectionpb.ServiceResponse, len(mr.ListServicesResponse.GetService()))
  76. for i, svc := range mr.ListServicesResponse.GetService() {
  77. svcs[i] = &v1alphareflectionpb.ServiceResponse{
  78. Name: svc.GetName(),
  79. }
  80. }
  81. v1alpha.MessageResponse = &v1alphareflectionpb.ServerReflectionResponse_ListServicesResponse{
  82. ListServicesResponse: &v1alphareflectionpb.ListServiceResponse{
  83. Service: svcs,
  84. },
  85. }
  86. }
  87. case *v1reflectionpb.ServerReflectionResponse_ErrorResponse:
  88. if mr != nil {
  89. v1alpha.MessageResponse = &v1alphareflectionpb.ServerReflectionResponse_ErrorResponse{
  90. ErrorResponse: &v1alphareflectionpb.ErrorResponse{
  91. ErrorCode: mr.ErrorResponse.GetErrorCode(),
  92. ErrorMessage: mr.ErrorResponse.GetErrorMessage(),
  93. },
  94. }
  95. }
  96. default:
  97. // no value set
  98. }
  99. return &v1alpha
  100. }
  101. func v1AlphaToV1Request(v1alpha *v1alphareflectionpb.ServerReflectionRequest) *v1reflectionpb.ServerReflectionRequest {
  102. var v1 v1reflectionpb.ServerReflectionRequest
  103. v1.Host = v1alpha.Host
  104. switch mr := v1alpha.MessageRequest.(type) {
  105. case *v1alphareflectionpb.ServerReflectionRequest_FileByFilename:
  106. v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_FileByFilename{
  107. FileByFilename: mr.FileByFilename,
  108. }
  109. case *v1alphareflectionpb.ServerReflectionRequest_FileContainingSymbol:
  110. v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_FileContainingSymbol{
  111. FileContainingSymbol: mr.FileContainingSymbol,
  112. }
  113. case *v1alphareflectionpb.ServerReflectionRequest_FileContainingExtension:
  114. if mr.FileContainingExtension != nil {
  115. v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_FileContainingExtension{
  116. FileContainingExtension: &v1reflectionpb.ExtensionRequest{
  117. ContainingType: mr.FileContainingExtension.GetContainingType(),
  118. ExtensionNumber: mr.FileContainingExtension.GetExtensionNumber(),
  119. },
  120. }
  121. }
  122. case *v1alphareflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType:
  123. v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType{
  124. AllExtensionNumbersOfType: mr.AllExtensionNumbersOfType,
  125. }
  126. case *v1alphareflectionpb.ServerReflectionRequest_ListServices:
  127. v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_ListServices{
  128. ListServices: mr.ListServices,
  129. }
  130. default:
  131. // no value set
  132. }
  133. return &v1
  134. }
  135. func v1ToV1AlphaRequest(v1 *v1reflectionpb.ServerReflectionRequest) *v1alphareflectionpb.ServerReflectionRequest {
  136. var v1alpha v1alphareflectionpb.ServerReflectionRequest
  137. v1alpha.Host = v1.Host
  138. switch mr := v1.MessageRequest.(type) {
  139. case *v1reflectionpb.ServerReflectionRequest_FileByFilename:
  140. if mr != nil {
  141. v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_FileByFilename{
  142. FileByFilename: mr.FileByFilename,
  143. }
  144. }
  145. case *v1reflectionpb.ServerReflectionRequest_FileContainingSymbol:
  146. if mr != nil {
  147. v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_FileContainingSymbol{
  148. FileContainingSymbol: mr.FileContainingSymbol,
  149. }
  150. }
  151. case *v1reflectionpb.ServerReflectionRequest_FileContainingExtension:
  152. if mr != nil {
  153. v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_FileContainingExtension{
  154. FileContainingExtension: &v1alphareflectionpb.ExtensionRequest{
  155. ContainingType: mr.FileContainingExtension.GetContainingType(),
  156. ExtensionNumber: mr.FileContainingExtension.GetExtensionNumber(),
  157. },
  158. }
  159. }
  160. case *v1reflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType:
  161. if mr != nil {
  162. v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType{
  163. AllExtensionNumbersOfType: mr.AllExtensionNumbersOfType,
  164. }
  165. }
  166. case *v1reflectionpb.ServerReflectionRequest_ListServices:
  167. if mr != nil {
  168. v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_ListServices{
  169. ListServices: mr.ListServices,
  170. }
  171. }
  172. default:
  173. // no value set
  174. }
  175. return &v1alpha
  176. }