Current section

Files

Jump to
isabelle_elixir lib isabelle_client arguments.ex
Raw

lib/isabelle_client/arguments.ex

defmodule IsabelleClient.Arguments do
@moduledoc false
def normalize(nil), do: %{}
def normalize([]), do: %{}
def normalize(args) when is_list(args) do
if Keyword.keyword?(args) do
Map.new(args, fn {key, value} -> {normalize_key(key), normalize_value(value)} end)
else
Enum.map(args, &normalize/1)
end
end
def normalize(%{} = args) do
Map.new(args, fn {key, value} -> {normalize_key(key), normalize(value)} end)
end
def normalize(value), do: value
defp normalize_value([]), do: []
defp normalize_value(value), do: normalize(value)
defp normalize_key(key) when is_atom(key), do: Atom.to_string(key)
defp normalize_key(key), do: key
end