Current section

Files

Jump to
mlld lib mlld.ex
Raw

lib/mlld.ex

defmodule Mlld do
@moduledoc """
Module-level convenience API backed by a lazily started default client.
The default client is registered as `Mlld.DefaultClient`.
"""
alias Mlld.Client
@default_client_name Mlld.DefaultClient
@spec default_client() :: pid()
def default_client do
case Process.whereis(@default_client_name) do
nil ->
case Client.start_link(name: @default_client_name) do
{:ok, client} ->
Process.unlink(client)
client
{:error, {:already_started, client}} ->
client
{:error, reason} ->
raise "failed to start default mlld client: #{inspect(reason)}"
end
client ->
client
end
end
@spec close() :: :ok
def close do
case Process.whereis(@default_client_name) do
nil -> :ok
client -> Client.stop(client)
end
end
@spec process(String.t(), keyword()) :: {:ok, String.t()} | {:error, Mlld.Error.t()}
def process(script, opts \\ []) do
Client.process(default_client(), script, opts)
end
@spec process_async(String.t(), keyword()) :: {:ok, Mlld.Handle.t()} | {:error, Mlld.Error.t()}
def process_async(script, opts \\ []) do
Client.process_async(default_client(), script, opts)
end
@spec execute(String.t(), term(), keyword()) :: {:ok, Mlld.ExecuteResult.t()} | {:error, Mlld.Error.t()}
def execute(filepath, payload \\ nil, opts \\ []) do
Client.execute(default_client(), filepath, payload, opts)
end
@spec execute_async(String.t(), term(), keyword()) :: {:ok, Mlld.Handle.t()} | {:error, Mlld.Error.t()}
def execute_async(filepath, payload \\ nil, opts \\ []) do
Client.execute_async(default_client(), filepath, payload, opts)
end
@spec analyze(String.t()) :: {:ok, Mlld.AnalyzeResult.t()} | {:error, Mlld.Error.t()}
def analyze(filepath) do
Client.analyze(default_client(), filepath)
end
end