From 5a958f3b049553487f8efa6f7b6fabf5be62c4b2 Mon Sep 17 00:00:00 2001 From: Dave Lucia Date: Tue, 28 Nov 2023 10:02:38 -0500 Subject: [PATCH 1/2] Document generated GRPC.Stub function arguments Adds clarifying documentation for how functions are generated for GRPC.Stub Closes #339 --- lib/grpc/stub.ex | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/lib/grpc/stub.ex b/lib/grpc/stub.ex index d671197f..824db6fe 100644 --- a/lib/grpc/stub.ex +++ b/lib/grpc/stub.ex @@ -35,7 +35,12 @@ defmodule GRPC.Stub do then use `recv/1` to receive the reply. And if the reply is streaming, `recv/1` returns a `Stream`. - You can refer to `call/6` for doc of your RPC functions. + ## RPC Functions + + RPC functions generated via the GRPC.Service.rpc/3 macro are exposed in `GRPC.Stub` + module exposing that service. The following function types are generated: + + ### Unary """ alias GRPC.Channel @insecure_scheme "http" @@ -219,23 +224,6 @@ defmodule GRPC.Stub do end @doc false - # # The actual function invoked when invoking an RPC function. - # - # Returns - # - # * Unary calls. `{:ok, reply} | {:ok, headers_map} | {:error, error}` - # * Client streaming. A `GRPC.Client.Stream` - # * Server streaming. `{:ok, Enumerable.t} | {:ok, Enumerable.t, trailers_map} | {:error, error}` - # - # Options - # - # * `:timeout` - request timeout. Default is 10s for unary calls and `:infinity` for - # client or server streaming calls - # * `:deadline` - when the request is timeout, will override timeout - # * `:metadata` - a map, your custom metadata - # * `:return_headers` - default is false. When it's true, a three elem tuple will be returned - # with the last elem being a map of headers `%{headers: headers, trailers: trailers}`(unary) or - # `%{headers: headers}`(server streaming) def call(_service_mod, rpc, %{channel: channel} = stream, request, opts) do {_, {req_mod, req_stream}, {res_mod, response_stream}} = rpc From c4258887d0b1533a4fc35ffe7fbf10ab2c9cc4aa Mon Sep 17 00:00:00 2001 From: Dave Lucia Date: Tue, 28 Nov 2023 10:26:07 -0500 Subject: [PATCH 2/2] unary --- lib/grpc/stub.ex | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/grpc/stub.ex b/lib/grpc/stub.ex index 824db6fe..83da6358 100644 --- a/lib/grpc/stub.ex +++ b/lib/grpc/stub.ex @@ -41,6 +41,38 @@ defmodule GRPC.Stub do module exposing that service. The following function types are generated: ### Unary + + Unary RPCs are where the client sends a single request, and receives a single response, like a normal + function call. Unary functions take following shape + + case Greeter.Stub.say_hello(channel, %Request{}, opts) do + {:ok, %Response{}} -> + # Received a response + {:ok, headers_map} -> + # Re + end + + See the [Options](#Options) section below for available options + + + + # # The actual function invoked when invoking an RPC function. + # + # Returns + # + # * Unary calls. `{:ok, reply} | {:ok, headers_map} | {:error, error}` + # * Client streaming. A `GRPC.Client.Stream` + # * Server streaming. `{:ok, Enumerable.t} | {:ok, Enumerable.t, trailers_map} | {:error, error}` + # + # Options + # + # * `:timeout` - request timeout. Default is 10s for unary calls and `:infinity` for + # client or server streaming calls + # * `:deadline` - when the request is timeout, will override timeout + # * `:metadata` - a map, your custom metadata + # * `:return_headers` - default is false. When it's true, a three elem tuple will be returned + # with the last elem being a map of headers `%{headers: headers, trailers: trailers}`(unary) or + # `%{headers: headers}`(server streaming) """ alias GRPC.Channel @insecure_scheme "http" @@ -118,7 +150,7 @@ defmodule GRPC.Stub do iex> GRPC.Stub.connect("localhost:50051", accepted_compressors: [GRPC.Compressor.Gzip]) {:ok, channel} - iex> GRPC.Stub.connect("/paht/to/unix.sock") + iex> GRPC.Stub.connect("/path/to/unix.sock") {:ok, channel} ## Options