Packages
dagger
0.18.9
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/defn.ex
defmodule Dagger.Mod.Object.Defn do
@moduledoc false
@doc false
def define(name, args, return, block) do
typespec_args =
case args do
{_self, args} ->
[quote(do: t()) | Enum.map(args, &typespec_arg/1)]
args ->
Enum.map(args, &typespec_arg/1)
end
args =
case args do
{self, args} ->
[var(self) | Enum.map(args, &var/1)]
args ->
Enum.map(args, &var/1)
end
quote do
@spec unquote(name)(unquote_splicing(typespec_args)) :: unquote(return)
def unquote(name)(unquote_splicing(args)) do
unquote(block)
end
end
end
# {var, type}
defp var({name, _}) do
Macro.var(name, nil)
end
# var
defp var({name, _, nil}) do
Macro.var(name, nil)
end
# pattern = var
defp var({:=, _, [_, v]}) do
var(v)
end
defp typespec_arg({name, {type, _}}) do
typespec_arg({name, type})
end
defp typespec_arg({_, type} = arg) do
arg = var(arg)
quote do
unquote(arg) :: unquote(type)
end
end
end