21 #include <unordered_set>
31 using grpc::reflection::v1alpha::ErrorResponse;
32 using grpc::reflection::v1alpha::ExtensionNumberResponse;
33 using grpc::reflection::v1alpha::ExtensionRequest;
34 using grpc::reflection::v1alpha::ListServiceResponse;
35 using grpc::reflection::v1alpha::ServerReflectionRequest;
36 using grpc::reflection::v1alpha::ServerReflectionResponse;
37 using grpc::reflection::v1alpha::ServiceResponse;
45 const std::vector<std::string>*
services) {
53 ServerReflectionRequest
request;
57 switch (
request.message_request_case()) {
58 case ServerReflectionRequest::MessageRequestCase::kFileByFilename:
61 case ServerReflectionRequest::MessageRequestCase::kFileContainingSymbol:
65 case ServerReflectionRequest::MessageRequestCase::
66 kFileContainingExtension:
70 case ServerReflectionRequest::MessageRequestCase::
71 kAllExtensionNumbersOfType:
74 response.mutable_all_extension_numbers_response());
76 case ServerReflectionRequest::MessageRequestCase::kListServices:
88 response.set_allocated_original_request(
89 new ServerReflectionRequest(
request));
97 ErrorResponse* error_response) {
98 error_response->set_error_code(
status.error_code());
99 error_response->set_error_message(
status.error_message());
108 ServiceResponse* service_response =
response->add_service();
109 service_response->set_name(
value);
116 ServerReflectionResponse*
response) {
123 if (file_desc ==
nullptr) {
126 std::unordered_set<std::string> seen_files;
133 ServerReflectionResponse*
response) {
140 if (file_desc ==
nullptr) {
143 std::unordered_set<std::string> seen_files;
150 ServerReflectionResponse*
response) {
157 if (
desc ==
nullptr) {
164 if (field_desc ==
nullptr) {
167 std::unordered_set<std::string> seen_files;
174 ExtensionNumberResponse*
response) {
181 if (
desc ==
nullptr) {
185 std::vector<const protobuf::FieldDescriptor*>
extensions;
197 std::unordered_set<std::string>* seen_files) {
198 if (seen_files->find(file_desc->
name()) != seen_files->end()) {
201 seen_files->insert(file_desc->
name());
205 file_desc->
CopyTo(&file_desc_proto);
206 file_desc_proto.SerializeToString(&
data);
207 response->mutable_file_descriptor_response()->add_file_descriptor_proto(
data);