defmodule LAG do
@moduledoc """
Documentation for `LAG`.
"""
import LAG.Shared
alias LAG.Graph
def degree_matrix(%Graph{} = graph) do
impl!(graph).degree_matrix(graph)
end
def default_backend() do
Process.get(backend_pdict_key()) || backend!(Application.fetch_env!(:lag, :default_backend))
end
def default_backend(backend) do
Process.put(backend_pdict_key(), backend!(backend)) ||
backend!(Application.fetch_env!(:lag, :default_backend))
end
## Helpers
defp backend!(backend) when is_atom(backend) do
backend!({backend, []})
end
defp backend!({backend, options}) when is_atom(backend) and is_list(options) do
# {backend, backend.init(options)}
{backend, []}
end
defp backend!(other) do
raise ArgumentError,
"backend must be an atom or a tuple {backend, options}, got: #{inspect(other)}"
end
end