Skip to main content

lib/quickbeam/locks_api.ex

defmodule QuickBEAM.LocksAPI do
  @moduledoc false

  @spec request_lock(list(), pid()) :: String.t()
  def request_lock([name, mode, if_available], caller_pid) do
    case QuickBEAM.LockManager.request_lock(name, mode, caller_pid, if_available) do
      :granted -> "granted"
      :not_available -> "not_available"
      :holder_down -> "holder_down"
    end
  end

  @spec release_lock([String.t()], pid()) :: nil
  def release_lock([name], caller_pid) do
    QuickBEAM.LockManager.release_lock(name, caller_pid)
    nil
  end

  @spec query_locks(term()) :: map()
  def query_locks(_args) do
    QuickBEAM.LockManager.query()
  end
end