Packages
dagger
0.9.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/codegen/compiler.ex
defmodule Dagger.Codegen.Compiler do
@moduledoc false
# Compile GraphQL introspection into Elixir code.
alias Dagger.Codegen.Elixir.Templates.Enum, as: EnumTmpl
alias Dagger.Codegen.Elixir.Templates.Input
alias Dagger.Codegen.Elixir.Templates.Object
alias Dagger.Codegen.Elixir.Templates.Scalar
def compile(
%{
"__schema" => %{
"types" => types
}
} = _introspection
) do
types
|> Enum.filter(fn type ->
not_graphql_introspection_types(type)
end)
|> Enum.map(&render(&1, types))
end
defp not_graphql_introspection_types(%{"name" => name}) do
name not in graphql_introspection_types()
end
defp graphql_introspection_types() do
[
"__Type",
"__Directive",
"__Field",
"__InputValue",
"__EnumValue",
"__Schema",
"__TypeKind",
"__DirectiveLocation"
]
end
defp render(%{"name" => name, "kind" => kind} = full_type, types) do
q =
case kind do
"OBJECT" ->
Object.render(full_type, types)
"SCALAR" ->
Scalar.render(full_type)
"ENUM" ->
EnumTmpl.render(full_type)
"INPUT_OBJECT" ->
Input.render(full_type)
end
name = if(name == "Query", do: "Client", else: name)
{"#{Macro.underscore(name)}.ex", q}
end
end