Packages
dagger
0.18.0
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/decoder.ex
defmodule Dagger.Mod.Decoder do
@moduledoc """
Provides set of functions for decoding value from function call.
"""
@doc """
Decode the given `value` into a proper `type`.
"""
def decode(value, type, dag)
def decode(nil, type, dag) do
cast(nil, type, dag)
end
def decode(value, type, dag) do
with {:ok, value} <- Jason.decode(value) do
cast(value, type, dag)
end
end
defp cast(value, :integer, _) when is_integer(value) do
{:ok, value}
end
defp cast(value, :float, _) when is_float(value) do
{:ok, value}
end
defp cast(value, :boolean, _) when is_boolean(value) do
{:ok, value}
end
defp cast(value, :string, _) when is_binary(value) do
{:ok, value}
end
defp cast(values, {:list, type}, dag) when is_list(values) do
values =
for value <- values do
{:ok, value} = cast(value, type, dag)
value
end
{:ok, values}
end
defp cast(nil, {:optional, _type}, _dag), do: {:ok, nil}
defp cast(value, {:optional, type}, dag), do: cast(value, type, dag)
defp cast(value, module, dag) when (is_map(value) or is_binary(value)) and is_atom(module) do
Code.ensure_loaded!(module)
if function_exported?(module, :__struct__, 0) do
Nestru.decode(value, module, dag)
else
{:ok, value}
end
end
defp cast(value, type, _) do
{:error, "Cannot cast value #{value} to type #{type}."}
end
end