reactor_req/lib/reactor/req/step.ex

102 lines
2.1 KiB
Elixir
Raw Normal View History

2024-08-12 20:31:40 +12:00
defmodule Reactor.Req.Step do
@moduledoc """
A step which delegates to `req`.
"""
use Reactor.Step
@doc false
@impl true
@spec run(Reactor.inputs(), Reactor.context(), keyword) :: {:ok | :error, any}
def run(arguments, _context, options) do
fun =
Keyword.fetch!(options, :fun)
arguments =
arguments
|> Enum.reject(&is_nil(elem(&1, 1)))
do_run(arguments, fun)
end
defp do_run(arguments, :delete) do
{request, options} = Keyword.pop(arguments, :request)
if request do
Req.delete(request, options)
else
Req.delete(options)
end
end
defp do_run(arguments, :get) do
{request, options} = Keyword.pop(arguments, :request)
if request do
Req.get(request, options)
else
Req.get(options)
end
end
defp do_run(arguments, :head) do
{request, options} = Keyword.pop(arguments, :request)
if request do
Req.head(request, options)
else
Req.head(options)
end
end
defp do_run(arguments, :merge) do
{request, options} = Keyword.pop(arguments, :request)
{:ok, Req.merge(request, options)}
end
defp do_run(arguments, :new) do
options = Keyword.delete(arguments, :request)
{:ok, Req.new(options)}
end
defp do_run(arguments, :patch) do
{request, options} = Keyword.pop(arguments, :request)
if request do
Req.patch(request, options)
else
Req.patch(options)
end
end
defp do_run(arguments, :post) do
{request, options} = Keyword.pop(arguments, :request)
if request do
Req.post(request, options)
else
Req.post(options)
end
end
defp do_run(arguments, :put) do
{request, options} = Keyword.pop(arguments, :request)
if request do
Req.put(request, options)
else
Req.put(options)
end
end
defp do_run(arguments, :request) do
{request, options} = Keyword.pop(arguments, :request)
Req.request(request, options)
end
defp do_run(arguments, :run) do
{request, options} = Keyword.pop(arguments, :request)
{:ok, Req.run(request, options)}
end
end