View Source Dagger.Mod.Object (dagger v0.15.1)

Declare a module as an object type.

Declare an object

Add use Dagger.Mod.Object to the Elixir module that want to be a Dagger module and give a name through :name configuration:

defmodule Potato do
  use Dagger.Mod.Object, name: "Potato"

  # ...
end

The module also support documentation by using Elixir standard documentation, @moduledoc.

Declare a function

The module provides a defn, a macro for declare a function. Let's declare a new function named echo that accepts a name as a string and return a container that echo a name in the module Potato from the previous section:

defmodule Potato do
  use Dagger.Mod.Object, name: "Potato"

  defn echo(name: String.t()) :: Dagger.Container.t() do
    dag()
    |> Dagger.Client.container()
    |> Dagger.Container.from("alpine")
    |> Dagger.Container.with_exec(["echo", name])
  end
end

From the example above, the defn allows you to annotate a type to function arguments and return type by using Elixir Typespec. The type will convert to a Dagger type when registering a module.

The supported primitive types for now are:

  1. integer() for a boolean type.
  2. boolean() for a boolean type.
  3. String.t() or binary() for a string type.
  4. list(type) or [type] for a list type.
  5. type | nil for optional type.

  6. Any type that generated under Dagger namespace (Dagger.Container.t(), Dagger.Directory.t(), etc.).

The function also support documentation by using Elixir standard documentation, @doc.

Summary

Functions

Declare a function.

Get function documentation.

Get module documentation.

Types

function_def()

@type function_def() :: {function_name(), keyword()}

function_name()

@type function_name() :: atom()

Functions

defn(call, list)

(macro)

Declare a function.

get_function_doc(module, name)

@spec get_function_doc(module(), function_name()) :: String.t() | nil

Get function documentation.

Return doc string or nil if that function didn't have a documentation.

get_module_doc(module)

@spec get_module_doc(module()) :: String.t() | nil

Get module documentation.

Returns module doc string or nil if the given module didn't have a documentation.