Packages
dagger
0.12.7
0.21.7
0.21.6
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.8
0.20.7
0.20.6
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0
0.19.11
0.19.10
0.19.9
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.19
0.18.18
0.18.17
0.18.16
0.18.15
0.18.14
0.18.13
0.18.12
0.18.11
0.18.10
0.18.9
0.18.8
0.18.7
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.2
0.17.1
0.17.0
0.16.3
0.16.2
0.16.1
0.16.0
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.0
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.2
0.0.0
retired
Dagger SDK for Elixir
Current section
Files
Jump to
Current section
Files
lib/dagger/mod/module.ex
defmodule Dagger.Mod.Module do
@moduledoc false
alias Dagger.Mod.Function
alias Dagger.Mod.Object
alias Dagger.Mod.Helper
@doc """
Define a Dagger module from the given module.
"""
@spec define(Dagger.Client.t(), module()) :: Dagger.Module.t()
def define(dag, module) when is_struct(dag, Dagger.Client) and is_atom(module) do
dag
|> Dagger.Client.module()
|> Dagger.Module.with_object(define_object(dag, module))
|> maybe_with_description(Object.get_module_doc(module))
end
defp maybe_with_description(module, nil), do: module
defp maybe_with_description(module, doc), do: Dagger.Module.with_description(module, doc)
defp define_object(dag, module) do
mod_name = module.__object__(:name)
functions = module.__object__(:functions)
type_def =
dag
|> Dagger.Client.type_def()
|> Dagger.TypeDef.with_object(Helper.camelize(mod_name))
functions
|> Enum.map(&Function.define(dag, module, &1))
|> Enum.reduce(
type_def,
&Dagger.TypeDef.with_function(&2, &1)
)
end
end