Packages
dagger
0.19.10
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/encoder.ex
defmodule Dagger.Mod.Encoder do
@moduledoc """
Provides set of functions for encoding value from function call.
"""
@doc """
Validate the given `value` and encoding it.
"""
def validate_and_encode(value, type) do
with {:ok, value} <- validate(value, type) do
encode(value)
end
end
defp validate(value, :integer) when is_integer(value) do
{:ok, value}
end
defp validate(value, :float) when is_float(value) do
{:ok, value}
end
defp validate(value, :boolean) when is_boolean(value) do
{:ok, value}
end
defp validate(value, :string) when is_binary(value) do
{:ok, value}
end
defp validate(values, {:list, type}) when is_list(values) do
Enum.reduce_while(values, {:ok, []}, fn value, {:ok, acc} ->
case validate(value, type) do
{:ok, value} -> {:cont, {:ok, [value | acc]}}
error -> {:halt, error}
end
end)
|> case do
{:ok, values} -> {:ok, Enum.reverse(values)}
error -> error
end
end
defp validate(_value, Dagger.Void) do
{:ok, nil}
end
defp validate(%module{} = value, module) do
{:ok, value}
end
defp validate(value, type) do
{:error, %Dagger.Mod.TypeMismatchError{value: value, type: type}}
end
defp encode(value) do
Jason.encode(value)
end
end