Protocol Buffers - Google's data interchange format (grpc依赖) https://developers.google.com/protocol-buffers/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.1 KiB

Implement service & method descriptor lookup in Ruby (#15817) This PR implements lookup of service descriptor and method descriptor objects in Ruby as described in issue https://github.com/protocolbuffers/protobuf/issues/14891. It contains three implementations - one for the CRuby extension API, one for JRuby, and one for FFI. With this patch, * `DescriptorPool#lookup('fully.qualified.service.name')` works and returns a `Google::Protobuf::ServiceDescriptor` object * You can call `#options` on that to get the service options * You can call `#methods` on that to get the services' methods as `Google::Protobuf::MethodDescriptor` objects, * You can call `MethodDescriptor#options` to get method options * You can also get the streaming flags & input/output types of the method with `#input_type`, `#output_type`, `#client_streaming`, and `#server_streaming`. In order to make the FFI implementation work, I had to mark some more methods in the UPB header as exported - I guess that's something which will have to be done on the UPB side, like this https://github.com/protocolbuffers/upb/commit/01fed1cc1ba255bf22b49393ba054b8d270e6ba3 CC @dazuma & @haberman from the original issue, and @JasonLunn (since you work on protobuf it seems - small world!) I apologies for the large volume of copy-pasta'd code from the existing descriptor class implementations into the new ones - I felt this was probably better than designing new abstractions to reduce it off the bat though; this feels like it "fits in" with the existing implementation. Closes #15817 COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/15817 from KJTsanaktsidis:ktsanaktsidis/add_service_method_descriptors 54d72184310d7d9bfc06d4a58956e3871170c43d PiperOrigin-RevId: 618221016
8 months ago
syntax = "proto3";
package service_test_protos;
import "google/protobuf/descriptor.proto";
message UnaryRequestType {
string ping = 1;
}
message UnaryResponseType {
string pong = 1;
}
message StreamRequestType {
string ping = 1;
uint32 sequence = 2;
}
message StreamResponseType {
string pong = 1;
uint32 sequence = 2;
}
message TestOptionsType {
uint32 int_option_value = 1;
}
extend google.protobuf.ServiceOptions {
optional TestOptionsType test_options = 50000;
}
service TestService {
option (test_options).int_option_value = 8325;
rpc UnaryOne(UnaryRequestType) returns (UnaryResponseType);
rpc UnaryTwo(UnaryRequestType) returns (UnaryResponseType);
rpc IdempotentMethod(UnaryRequestType) returns (UnaryResponseType) {
option idempotency_level = IDEMPOTENT;
}
rpc PureMethod(UnaryRequestType) returns (UnaryResponseType) {
option idempotency_level = NO_SIDE_EFFECTS;
}
rpc StreamingMethod(stream StreamRequestType)
returns (stream StreamResponseType);
}
service DeprecatedService {
option deprecated = true;
}