Current section
Files
Jump to
Current section
Files
lib/hafnium/tool.ex
defmodule Hafnium.Tool do
@moduledoc false
@doc """
Stringify map keys.
## Examples
iex> Hafnium.Tool.stringify_keys(%{})
%{}
iex> Hafnium.Tool.stringify_keys(%{foo: "bar"})
%{"foo" => "bar"}
iex> Hafnium.Tool.stringify_keys(%{foo: :bar})
%{"foo" => :bar}
iex> Hafnium.Tool.stringify_keys(%{"foo" => "bar"})
%{"foo" => "bar"}
iex> Hafnium.Tool.stringify_keys([])
[]
"""
@spec stringify_keys(map) :: map
def stringify_keys(%{} = map) do
map
|> Enum.map(fn {k, v} -> {stringify_keys(k), v} end)
|> Enum.into(%{})
end
def stringify_keys(key) when is_atom(key), do: Atom.to_string(key)
def stringify_keys(key), do: key
@doc """
Atomize map keys.
## Examples
iex> Hafnium.Tool.atomize_keys(%{})
%{}
iex> Hafnium.Tool.atomize_keys(%{foo: "bar"})
%{foo: "bar"}
iex> Hafnium.Tool.atomize_keys(%{foo: :bar})
%{foo: :bar}
iex> Hafnium.Tool.atomize_keys(%{"foo" => "bar"})
%{foo: "bar"}
iex> Hafnium.Tool.atomize_keys([])
[]
"""
@spec atomize_keys(map) :: map
def atomize_keys(%{} = map) do
map
|> Enum.map(fn {k, v} -> {atomize_keys(k), v} end)
|> Enum.into(%{})
end
def atomize_keys(key) when is_binary(key), do: String.to_atom(key)
def atomize_keys(key), do: key
end