Skip to content

Commit 17f4e14

Browse files
author
Adriano Santos
committed
Merge remote-tracking branch 'upstream/master'
2 parents 073d960 + 66e4fe7 commit 17f4e14

File tree

9 files changed

+67
-42
lines changed

9 files changed

+67
-42
lines changed

lib/grpc/credential.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ defmodule GRPC.Credential do
2323
Creates credential.
2424
"""
2525
def new(opts) do
26-
%__MODULE__{ssl: Keyword.get(opts, :ssl) || []}
26+
opts = Keyword.validate!(opts, [:ssl])
27+
%__MODULE__{ssl: opts[:ssl] || []}
2728
end
2829
end

lib/grpc/endpoint.ex

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,21 @@ defmodule GRPC.Endpoint do
3939
|> init_interceptors()
4040

4141
servers = Module.get_attribute(env.module, :servers)
42-
servers = Enum.map(servers, fn {ss, opts} -> {ss, parse_run_opts(opts, %{})} end)
42+
43+
servers =
44+
Enum.map(servers, fn {ss, opts} ->
45+
opts = Keyword.validate!(opts, [:interceptors])
46+
47+
run_args =
48+
if interceptors = opts[:interceptors] do
49+
%{interceptors: interceptors}
50+
else
51+
%{}
52+
end
53+
54+
{ss, run_args}
55+
end)
56+
4357
server_interceptors = server_interceptors(servers, %{})
4458
servers = parse_servers(servers)
4559

@@ -100,16 +114,6 @@ defmodule GRPC.Endpoint do
100114
|> List.flatten()
101115
end
102116

103-
defp parse_run_opts([], acc), do: acc
104-
105-
defp parse_run_opts([{:interceptors, interceptors} | tail], acc) do
106-
parse_run_opts(tail, Map.put(acc, :interceptors, interceptors))
107-
end
108-
109-
defp parse_run_opts([{k, _} | _], _) do
110-
raise ArgumentError, message: "Unknown option for GRPC.Endpoint.run/2: #{k}"
111-
end
112-
113117
defp init_interceptors(interceptors) do
114118
Enum.map(interceptors, fn
115119
{interceptor, opts} ->

lib/grpc/server.ex

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,19 @@ defmodule GRPC.Server do
122122

123123
defmacro __using__(opts) do
124124
quote bind_quoted: [opts: opts], location: :keep do
125+
opts =
126+
Keyword.validate!(opts, [
127+
:service,
128+
codecs: [GRPC.Codec.Proto, GRPC.Codec.WebText, GRPC.Codec.JSON],
129+
compressors: [],
130+
http_transcode: false
131+
])
132+
125133
service_mod = opts[:service]
126134
service_name = service_mod.__meta__(:name)
127-
codecs = opts[:codecs] || [GRPC.Codec.Proto, GRPC.Codec.WebText, GRPC.Codec.JSON]
128-
compressors = opts[:compressors] || []
129-
http_transcode = opts[:http_transcode] || false
135+
codecs = opts[:codecs]
136+
compressors = opts[:compressors]
137+
http_transcode = opts[:http_transcode]
130138

131139
codecs = if http_transcode, do: [GRPC.Codec.JSON | codecs], else: codecs
132140

@@ -404,9 +412,10 @@ defmodule GRPC.Server do
404412
@spec start_endpoint(atom(), non_neg_integer(), Keyword.t()) ::
405413
{atom(), any(), non_neg_integer()}
406414
def start_endpoint(endpoint, port, opts \\ []) do
415+
opts = Keyword.validate!(opts, adapter: GRPC.Server.Adapters.Cowboy)
416+
adapter = opts[:adapter]
407417
servers = endpoint.__meta__(:servers)
408418
servers = GRPC.Server.servers_to_map(servers)
409-
adapter = Keyword.get(opts, :adapter) || GRPC.Server.Adapters.Cowboy
410419
adapter.start(endpoint, servers, port, opts)
411420
end
412421

@@ -422,15 +431,17 @@ defmodule GRPC.Server do
422431
@doc false
423432
@spec stop(module() | [module()], Keyword.t()) :: any()
424433
def stop(servers, opts \\ []) do
425-
adapter = Keyword.get(opts, :adapter) || GRPC.Server.Adapters.Cowboy
434+
opts = Keyword.validate!(opts, adapter: GRPC.Server.Adapters.Cowboy)
435+
adapter = opts[:adapter]
426436
servers = GRPC.Server.servers_to_map(servers)
427437
adapter.stop(nil, servers)
428438
end
429439

430440
@doc false
431441
@spec stop_endpoint(atom(), Keyword.t()) :: any()
432442
def stop_endpoint(endpoint, opts \\ []) do
433-
adapter = Keyword.get(opts, :adapter) || GRPC.Server.Adapters.Cowboy
443+
opts = Keyword.validate!(opts, adapter: GRPC.Server.Adapters.Cowboy)
444+
adapter = opts[:adapter]
434445
servers = endpoint.__meta__(:servers)
435446
servers = GRPC.Server.servers_to_map(servers)
436447
adapter.stop(endpoint, servers)

lib/grpc/server/interceptors/cors.ex

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,10 @@ defmodule GRPC.Server.Interceptors.CORS do
4141
# This is not a full-on Macro context, so binary concatenations and
4242
# variables are handled before this step.
4343

44-
# TODO: use Keyword.validate! once we drop support for Elixir < 1.13
45-
46-
{allow_origin, opts} = Keyword.pop(opts, :allow_origin)
47-
{allow_headers, opts} = Keyword.pop(opts, :allow_headers)
48-
49-
if opts != [] do
50-
raise ArgumentError,
51-
"valid keys are [:allow_origin, :allow_headers], got: #{inspect(opts)}"
52-
end
44+
opts = Keyword.validate!(opts, [:allow_origin, allow_headers: nil])
5345

5446
allow_origin =
55-
case allow_origin do
47+
case opts[:allow_origin] do
5648
{:&, [], [{:/, [], [_signature, 2]}]} = fun ->
5749
fun
5850

@@ -65,7 +57,7 @@ defmodule GRPC.Server.Interceptors.CORS do
6557
end
6658

6759
allow_headers =
68-
case allow_headers do
60+
case opts[:allow_headers] do
6961
{:&, [], [{:/, [], [_signature, 2]}]} = fun ->
7062
fun
7163

lib/grpc/server/interceptors/logger.ex

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ defmodule GRPC.Server.Interceptors.Logger do
2424

2525
@impl true
2626
def init(opts) do
27-
level = Keyword.get(opts, :level) || :info
28-
[level: level]
27+
Keyword.validate!(opts, level: :info)
2928
end
3029

3130
@impl true

lib/grpc/server/supervisor.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ defmodule GRPC.Server.Supervisor do
6060
through the :start_server option for the GRPC.Server.Supervisor"
6161
end
6262

63+
opts = Keyword.validate!(opts, [:endpoint, :servers, :start_server, :port])
64+
6365
endpoint_or_servers =
6466
case {opts[:endpoint], opts[:servers]} do
6567
{endpoint, servers}

lib/grpc/service.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ defmodule GRPC.Service do
3535
"""
3636

3737
defmacro __using__(opts) do
38+
opts = Keyword.validate!(opts, [:name, :protoc_gen_elixir_version])
39+
3840
quote do
3941
import GRPC.Service, only: [rpc: 4, rpc: 3, stream: 1]
4042

lib/grpc/stub.ex

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ defmodule GRPC.Stub do
5858
require Logger
5959

6060
defmacro __using__(opts) do
61+
opts = Keyword.validate!(opts, [:service])
62+
6163
quote bind_quoted: [opts: opts] do
6264
service_mod = opts[:service]
6365
service_name = service_mod.__meta__(:name)
@@ -198,15 +200,27 @@ defmodule GRPC.Stub do
198200
through the :adapter option for GRPC.Stub.connect/3"
199201
end
200202

201-
adapter = Keyword.get(opts, :adapter) || GRPC.Client.Adapters.Gun
202-
203-
cred = Keyword.get(opts, :cred)
203+
opts =
204+
Keyword.validate!(opts,
205+
cred: nil,
206+
adapter: GRPC.Client.Adapters.Gun,
207+
adapter_opts: [],
208+
interceptors: [],
209+
codec: GRPC.Codec.Proto,
210+
compressor: nil,
211+
accepted_compressors: [],
212+
headers: []
213+
)
214+
215+
adapter = opts[:adapter]
216+
217+
cred = opts[:cred]
204218
scheme = if cred, do: @secure_scheme, else: @insecure_scheme
205-
interceptors = (Keyword.get(opts, :interceptors) || []) |> init_interceptors
206-
codec = Keyword.get(opts, :codec) || GRPC.Codec.Proto
207-
compressor = Keyword.get(opts, :compressor)
208-
accepted_compressors = Keyword.get(opts, :accepted_compressors) || []
209-
headers = Keyword.get(opts, :headers) || []
219+
interceptors = init_interceptors(opts[:interceptors])
220+
codec = opts[:codec]
221+
compressor = opts[:compressor]
222+
accepted_compressors = opts[:accepted_compressors]
223+
headers = opts[:headers]
210224

211225
accepted_compressors =
212226
if compressor do
@@ -215,7 +229,7 @@ defmodule GRPC.Stub do
215229
accepted_compressors
216230
end
217231

218-
adapter_opts = opts[:adapter_opts] || []
232+
adapter_opts = opts[:adapter_opts]
219233

220234
unless is_list(adapter_opts) do
221235
raise ArgumentError, ":adapter_opts must be a keyword list if present"

mix.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
defmodule GRPC.Mixfile do
22
use Mix.Project
33

4-
@version "0.9.0"
4+
@version "0.10.0"
55

66
def project do
77
[
88
app: :grpc,
99
version: @version,
10-
elixir: "~> 1.12",
10+
elixir: "~> 1.15",
1111
elixirc_paths: elixirc_paths(Mix.env()),
1212
build_embedded: Mix.env() == :prod,
1313
start_permanent: Mix.env() == :prod,

0 commit comments

Comments
 (0)