Current section
Files
Jump to
Current section
Files
lib/absinthe_throttle.ex
defmodule AbsintheThrottle do
defmacro __using__(opts) do
alias Absinthe.Resolution
adapter = Keyword.fetch!(opts, :adapter)
arguments = Keyword.get(opts, :arguments, nil)
quote do
def middleware([], field, object), do: []
def middleware(middleware, field, object), do: [__MODULE__ | middleware]
def call(%Resolution{state: :unresolved, parent_type: %{identifier: :query}} = res, _config) do
arguments = case unquote(arguments) do
[] -> []
x -> [res] ++ [x]
end
case apply(unquote(adapter), :transaction, arguments) do
{:ok, res} -> res
{:error, _} = error ->
res = Resolution.put_result(res, error)
%{res | middleware: []}
end
end
end
end
end