Skip to content

Commit d8c729a

Browse files
committed
Atomize keys before handle payload
1 parent a06602a commit d8c729a

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

lib/jsonrpc2_plug/method.ex

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ defmodule JSONRPC2Plug.Method do
105105
@spec handle({module(), fun()}, Request.params(), Plug.Conn.t()) :: result()
106106
def handle({module, func}, params, conn) do
107107
with {:ok, params} <- module.validate(params),
108-
{:ok, result} <- apply(module, func, [params, conn]) do
108+
{:ok, result} <- apply(module, func, [atomize_keys(params), conn]) do
109109
{:ok, result}
110110
else
111111
{:invalid, errors} ->
@@ -115,4 +115,14 @@ defmodule JSONRPC2Plug.Method do
115115
error
116116
end
117117
end
118+
119+
defp atomize_keys(params) when is_map(params) do
120+
params
121+
|> Enum.map(fn {k, v} -> {String.to_atom(k), atomize_keys(v)} end)
122+
|> Enum.into(%{})
123+
end
124+
defp atomize_keys([head | rest]),
125+
do: [atomize_keys(head) | atomize_keys(rest)]
126+
defp atomize_keys(value),
127+
do: value
118128
end

0 commit comments

Comments
 (0)