Packages

Pluggable resolve throttling for Absinthe GraphQL.

Current section

Files

Jump to
absinthe_throttle lib adapter semaphore.ex
Raw

lib/adapter/semaphore.ex

defmodule AbsintheThrottle.Adapter.Semaphore do
def transaction(res, args \\ []) do
name = Keyword.fetch!(args, :name)
size = Keyword.fetch!(args, :size)
error = Keyword.get(args, :error, {:error, :timeout})
case Semaphore.call(name, size, fn -> {:ok, res} end) do
{:ok, _} = res -> res
{:error, :max} -> error
end
end
end