Packages
dagger
0.9.4
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/codegen/elixir/templates/enum_tmpl.ex
defmodule Dagger.Codegen.Elixir.Templates.Enum do
@moduledoc false
alias Dagger.Codegen.Elixir.Function
alias Dagger.Codegen.Elixir.Module, as: Mod
def render(%{
"name" => name,
"description" => desc,
"enumValues" => enum_values
}) do
mod_name = Mod.from_name(name)
enum_values =
enum_values
|> Enum.sort_by(fn %{"name" => name} -> name end)
type = render_possible_enum_values(enum_values)
funs =
enum_values
|> Enum.map(&render_function/1)
quote do
defmodule unquote(mod_name) do
@moduledoc unquote(desc)
@type t() :: unquote(type)
unquote_splicing(funs)
end
end
end
defp render_function(%{
"name" => value,
"description" => desc,
"deprecationReason" => deprecated_reason
}) do
Function.define(
value,
[],
nil,
quote do
unquote(String.to_atom(value))
end,
doc: desc,
deprecated: deprecated_reason,
spec: {[], quote(do: unquote(String.to_atom(value)))}
)
end
defp render_possible_enum_values([%{"name" => v1}, %{"name" => v2}]) do
{:|, [], [String.to_atom(v1), String.to_atom(v2)]}
end
defp render_possible_enum_values([%{"name" => v1} | rest]) do
{:|, [], [String.to_atom(v1), render_possible_enum_values(rest)]}
end
end