Current section

Files

Jump to
finitomata lib finitomata distributed cluster_info external.ex
Raw

lib/finitomata/distributed/cluster_info/external.ex

defmodule Finitomata.ClusterInfo.External do
@moduledoc false
defmacro __using__(opts \\ []) do
impl = Keyword.get(opts, :implementation, Finitomata.ClusterInfo.Naive)
quote do
@behaviour Finitomata.ClusterInfo
@impl Finitomata.ClusterInfo
def init(init_arg) do
if Code.ensure_loaded?(unquote(impl)) and function_exported?(unquote(impl), :whois, 1),
do: Finitomata.ClusterInfo.init(unquote(impl)),
else: :error
end
@impl Finitomata.ClusterInfo
def nodes, do: [node() | Node.list()]
@impl Finitomata.ClusterInfo
def whois(id) do
{unquote(impl).whois(id), nil}
end
end
end
end