Packages
dagger
0.19.6
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/object/function_def.ex
defmodule Dagger.Mod.Object.FunctionDef do
@moduledoc false
# A function declaration from `Dagger.Mod.Object.defn/2`.
@enforce_keys [:self, :args, :return]
defstruct @enforce_keys
@doc """
Convert a `fun_def` into Dagger Function.
"""
def to_dag_function(%__MODULE__{} = fun_def, name, module, %Dagger.Client{} = dag)
when is_atom(name) and is_atom(module) do
dag
|> Dagger.Client.function(
Dagger.Mod.Helper.camelize(name),
Dagger.Mod.Object.TypeDef.define(dag, fun_def.return)
)
|> maybe_with_description(Dagger.Mod.Object.get_function_doc(module, name))
|> with_args(fun_def.args, dag)
end
@doc """
Define a Dagger Function from `fun_def`.
"""
def define(
%__MODULE__{} = fun_def,
name,
module,
%Dagger.TypeDef{} = type_def,
%Dagger.Client{} = dag
)
when is_atom(name) and is_atom(module) do
Dagger.TypeDef.with_function(type_def, to_dag_function(fun_def, name, module, dag))
end
defp maybe_with_description(function, nil), do: function
defp maybe_with_description(function, doc), do: Dagger.Function.with_description(function, doc)
defp with_args(fun, args, dag) do
args
|> Enum.reduce(fun, fn {name, arg_def}, fun ->
type = Keyword.fetch!(arg_def, :type)
type_def =
dag
|> Dagger.Mod.Object.TypeDef.define(type)
opts =
arg_def
|> Keyword.take([:doc, :default, :default_path, :ignore])
|> Enum.reject(fn {_, value} -> is_nil(value) end)
|> Enum.map(&normalize_arg_option/1)
fun
|> Dagger.Function.with_arg(name, type_def, opts)
end)
end
defp normalize_arg_option({:doc, doc}), do: {:description, doc}
defp normalize_arg_option({:default, default_value}),
do: {:default_value, Jason.encode!(default_value)}
defp normalize_arg_option(opt), do: opt
end