Current section

Files

Jump to
surgex lib surgex rpc processor.ex
Raw

lib/surgex/rpc/processor.ex

defmodule Surgex.RPC.Processor do
@moduledoc false
def call(service_mod, request_buf, request_mod, response_mod) do
service_result =
request_buf
|> request_mod.decode()
|> service_mod.call()
case service_result do
:ok ->
{:ok, response_mod.encode(response_mod.new())}
{:ok, response_struct} ->
{:ok, response_mod.encode(response_struct)}
:error ->
{:error, [error: nil]}
{:error, errors} when is_list(errors) ->
{:error, Enum.map(errors, &normalize_error/1)}
{:error, error} ->
{:error, [normalize_error(error)]}
end
end
defp normalize_error(reason) when is_atom(reason) or is_binary(reason), do: {reason, nil}
defp normalize_error({reason, pointer}), do: {reason, pointer}
end