diff --git a/async-grpc.gemspec b/async-grpc.gemspec index eaade72..f366e0e 100644 --- a/async-grpc.gemspec +++ b/async-grpc.gemspec @@ -26,6 +26,6 @@ Gem::Specification.new do |spec| spec.add_dependency "async", ">= 2.38.0" spec.add_dependency "async-http" - spec.add_dependency "protocol-grpc", "~> 0.12.0" + spec.add_dependency "protocol-grpc", "~> 0.13.0" spec.add_dependency "protocol-http", "~> 0.60" end diff --git a/lib/async/grpc/client.rb b/lib/async/grpc/client.rb index f6912d4..0e90d8d 100644 --- a/lib/async/grpc/client.rb +++ b/lib/async/grpc/client.rb @@ -10,7 +10,6 @@ require "protocol/http" require "protocol/grpc" require "protocol/grpc/interface" -require "protocol/grpc/methods" require "protocol/grpc/body/readable_body" require "protocol/grpc/body/writable_body" require "protocol/grpc/metadata" @@ -123,7 +122,7 @@ def invoke(service, method, request = nil, metadata: {}, timeout: nil, encoding: raise ArgumentError, "Unknown method: #{method}" unless rpc path = service.path(method) - headers = Protocol::GRPC::Methods.build_headers( + headers = Protocol::GRPC::Metadata.build( metadata: metadata, timeout: timeout, content_type: "application/grpc+proto" @@ -328,7 +327,7 @@ def check_status!(response) return if status == Protocol::GRPC::Status::OK message = Protocol::GRPC::Metadata.extract_message(response.headers) - metadata = Protocol::GRPC::Methods.extract_metadata(response.headers) + metadata = Protocol::GRPC::Metadata.extract(response.headers) remote_error = RemoteError.for(message, metadata) diff --git a/lib/async/grpc/dispatcher.rb b/lib/async/grpc/dispatcher.rb index 8672f7e..2e26984 100644 --- a/lib/async/grpc/dispatcher.rb +++ b/lib/async/grpc/dispatcher.rb @@ -8,8 +8,8 @@ require_relative "error" require "protocol/grpc/middleware" -require "protocol/grpc/methods" require "protocol/grpc/call" +require "protocol/grpc/route" require "protocol/grpc/body/readable_body" require "protocol/grpc/body/writable_body" require "protocol/grpc/metadata" @@ -113,8 +113,8 @@ def dispatch_to_service(service, handler_method, input, output, call, parent: As # @returns [Protocol::HTTP::Response] The HTTP response # @raises [Protocol::GRPC::Error] If service or method is not found def dispatch(request) - # Parse service and method from path: - service_name, method_name = Protocol::GRPC::Methods.parse_path(request.path) + # Extract the routing information from the request path: + service_name, method_name = Protocol::GRPC::Route.parse(request.path) # Find service: service = @services[service_name] @@ -155,7 +155,7 @@ def dispatch(request) # Create response object: response = Protocol::HTTP::Response[200, response_headers, output] - # Create call context with request, response and deadline: + # Create the call context: call = Protocol::GRPC::Call.for(request, response) if rpc_descriptor.streaming? diff --git a/test/async/grpc/client.rb b/test/async/grpc/client.rb index d11e184..d6aab5f 100644 --- a/test/async/grpc/client.rb +++ b/test/async/grpc/client.rb @@ -7,7 +7,7 @@ require "async/http/server" require "async/http/client" require "async/http/endpoint" -require "protocol/grpc/methods" +require "protocol/grpc/metadata" require "protocol/grpc/body/readable_body" require "sus/fixtures/async/http" require "async/grpc/test_interface" diff --git a/test/async/grpc/dispatcher.rb b/test/async/grpc/dispatcher.rb index 8b06b1c..980f062 100644 --- a/test/async/grpc/dispatcher.rb +++ b/test/async/grpc/dispatcher.rb @@ -8,7 +8,7 @@ require "async/grpc/dispatcher" require "async/grpc/service" require "protocol/http" -require "protocol/grpc/methods" +require "protocol/grpc/route" require "protocol/grpc/metadata" require "protocol/grpc/body/writable_body" require "async/grpc/test_interface" @@ -44,8 +44,8 @@ end end - let(:headers) {Protocol::GRPC::Methods.build_headers} - let(:path) {Protocol::GRPC::Methods.build_path(service_name, "UnaryCall")} + let(:headers) {Protocol::GRPC::Metadata.build} + let(:path) {Protocol::GRPC::Route.build(service_name, "UnaryCall")} let(:request) {Protocol::HTTP::Request.new("http", "localhost", "POST", path, nil, headers, request_body)} it "dispatches to registered service" do @@ -62,7 +62,7 @@ end it "handles CamelCase method names" do - path = Protocol::GRPC::Methods.build_path(service_name, "SayHello") + path = Protocol::GRPC::Route.build(service_name, "SayHello") request = Protocol::HTTP::Request.new("http", "localhost", "POST", path, nil, headers, request_body) response = dispatcher.call(request) @@ -76,7 +76,7 @@ end it "returns UNIMPLEMENTED for unknown service" do - path = Protocol::GRPC::Methods.build_path("unknown.Service", "UnaryCall") + path = Protocol::GRPC::Route.build("unknown.Service", "UnaryCall") request = Protocol::HTTP::Request.new("http", "localhost", "POST", path, nil, headers, request_body) response = dispatcher.call(request) @@ -87,7 +87,7 @@ end it "returns UNIMPLEMENTED for unknown method" do - path = Protocol::GRPC::Methods.build_path(service_name, "UnknownMethod") + path = Protocol::GRPC::Route.build(service_name, "UnknownMethod") request = Protocol::HTTP::Request.new("http", "localhost", "POST", path, nil, headers, request_body) response = dispatcher.call(request) @@ -107,7 +107,7 @@ end it "handles timeout correctly" do - path = Protocol::GRPC::Methods.build_path(service_name, "SlowCall") + path = Protocol::GRPC::Route.build(service_name, "SlowCall") request = Protocol::HTTP::Request.new("http", "localhost", "POST", path, nil, headers, request_body) request.headers["grpc-timeout"] = "100m" # 100 milliseconds @@ -144,7 +144,7 @@ end it "marks headers as trailers for server streaming response with data" do - path = Protocol::GRPC::Methods.build_path(service_name, "ServerStreamingCall") + path = Protocol::GRPC::Route.build(service_name, "ServerStreamingCall") request = Protocol::HTTP::Request.new("http", "localhost", "POST", path, nil, headers, request_body) response = dispatcher.call(request) @@ -173,7 +173,7 @@ end.new(error_interface, error_service_name) dispatcher = subject.new(services: {error_service_name => error_service}) - path = Protocol::GRPC::Methods.build_path(error_service_name, "WriteThenError") + path = Protocol::GRPC::Route.build(error_service_name, "WriteThenError") request = Protocol::HTTP::Request.new("http", "localhost", "POST", path, nil, headers, request_body) response = dispatcher.call(request) @@ -205,7 +205,7 @@ end.new(trailers_only_interface, trailers_only_service_name) dispatcher = subject.new(services: {trailers_only_service_name => trailers_only_service}) - path = Protocol::GRPC::Methods.build_path(trailers_only_service_name, "ErrorOnly") + path = Protocol::GRPC::Route.build(trailers_only_service_name, "ErrorOnly") request = Protocol::HTTP::Request.new("http", "localhost", "POST", path, nil, headers, request_body) response = dispatcher.call(request)