Packages
dagger
0.9.5
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/input_tmpl.ex
defmodule Dagger.Codegen.Elixir.Templates.Input do
@moduledoc false
alias Dagger.Codegen.Elixir.Module, as: Mod
alias Dagger.Codegen.Elixir.Type
def render(%{
"name" => name,
"description" => desc,
"inputFields" => fields
}) do
mod_name = Mod.from_name(name)
desc =
if desc == "" do
name
else
desc
end
fields =
fields
|> Enum.sort_by(fn %{"name" => name} -> name end)
struct_fields = Enum.map(fields, &to_struct_field/1)
data_type_t =
{:%, [],
[
{:__MODULE__, [], Elixir},
{:%{}, [],
fields
|> Enum.map(fn %{"type" => type} = field ->
type =
case type do
%{"kind" => "NON_NULL", "ofType" => type} -> Type.render_type(type)
type -> Type.render_type(type) |> Type.render_nullable_type()
end
{to_struct_field(field), type}
end)}
]}
quote do
defmodule unquote(mod_name) do
@moduledoc unquote(desc)
@type t() :: unquote(data_type_t)
@derive Nestru.Decoder
defstruct unquote(struct_fields)
end
end
end
defp to_struct_field(%{"name" => name}) do
name
|> Macro.underscore()
|> String.to_atom()
end
end