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/scope.ex
defmodule Dagger.Mod.Scope do
@moduledoc false
defstruct [
# A parent need to convert into module.
:parent_name,
# Data of the parent.
:parent_json,
# A function to invoke.
:fn_name,
# The arguments of the function.
:input_args
]
def from_fn_call(fn_call) do
with {:ok, parent_name} <- Dagger.FunctionCall.parent_name(fn_call),
{:ok, fn_name} <- Dagger.FunctionCall.name(fn_call),
{:ok, parent_json} <- Dagger.FunctionCall.parent(fn_call),
{:ok, input_args} <- Dagger.FunctionCall.input_args(fn_call) do
{:ok,
%__MODULE__{
parent_name: parent_name,
parent_json: parent_json,
fn_name: fn_name,
input_args: input_args
}}
end
end
def fn_name(%__MODULE__{} = scope) do
scope.fn_name |> Macro.underscore() |> String.to_existing_atom()
end
def args!(%__MODULE__{} = scope, arg_defs, dag) do
scope.input_args
|> fetch_args!()
|> decode_args!(arg_defs, dag)
end
def into_module(%__MODULE__{} = scope, module, dag) do
Dagger.Mod.Decoder.decode(scope.parent_json, {:optional, module}, dag)
end
defp fetch_args!(input_args) do
Enum.into(input_args, %{}, fn arg ->
{:ok, name} = Dagger.FunctionCallArgValue.name(arg)
{:ok, value} = Dagger.FunctionCallArgValue.value(arg)
{Macro.underscore(name), value}
end)
end
# Get the value from a given `input_args` and make it positional by `args_def`.
def decode_args!(input_args, arg_defs, dag) do
for {name, arg_def} <- arg_defs do
{:ok, value} =
input_args
|> Map.get(to_string(name))
|> Dagger.Mod.Decoder.decode(arg_def[:type], dag)
value
end
end
end