lib/dagger.ex

defmodule Dagger do
  @moduledoc """
  The [Dagger](https://dagger.io/) SDK for Elixir.

  See `getting_start.livemd` for starter point.
  """

  use Dagger.QueryBuilder

  defstruct [:client, :query]

  @doc """
  Connecting to Dagger.
  """
  def connect(opts \\ []) do
    with {:ok, client} <- Dagger.Client.connect(opts) do
      {:ok,
       %Dagger.Query{
         client: client,
         selection: query()
       }}
    end
  end

  @doc """
  Similar to `connect/1` but raise exception when found an error.
  """
  def connect!(opts \\ []) do
    case connect(opts) do
      {:ok, query} -> query
      error -> raise "Cannot connect to Dagger engine, cause: #{inspect(error)}"
    end
  end

  @doc """
  Disconnecting Dagger.
  """
  def disconnect(%Dagger.Query{client: client}) do
    Dagger.Client.disconnect(client)
  end
end