Packages
playwrightais
1.32.1-rc
Playwright is an Elixir library to automate Chromium, Firefox and WebKit browsers with a single API. Playwright delivers automation that is ever-green, capable, reliable and fast.
Current section
Files
Jump to
Current section
Files
lib/playwright/extra/map.ex
defmodule Playwright.Extra.Map do
@moduledoc false
require Logger
alias Playwright.Extra.Atom
def deep_atomize_keys(map) when is_map(map) do
map
|> Map.new(fn
{k, v} when is_map(v) -> {Atom.from_string(k), deep_atomize_keys(v)}
{k, list} when is_list(list) -> {Atom.from_string(k), Enum.map(list, fn v -> deep_atomize_keys(v) end)}
{k, v} -> {Atom.from_string(k), v}
end)
end
def deep_atomize_keys(other), do: other
def deep_camelize_keys(list) when is_list(list) do
Enum.into(list, %{}) |> deep_camelize_keys()
end
def deep_camelize_keys(map) when is_map(map) do
Map.new(map, fn
{k, v} when is_struct(v) ->
{camelize(k), v}
{k, v} when is_map(v) ->
{camelize(k), deep_camelize_keys(v)}
{k, l} when is_list(l) ->
{camelize(k), Enum.map(l, fn v -> deep_camelize_keys(v) end)}
{k, v} ->
{camelize(k), v}
end)
end
def deep_camelize_keys(other), do: other
def deep_snakecase_keys(list) when is_list(list) do
Enum.into(list, %{}) |> deep_snakecase_keys()
end
def deep_snakecase_keys(map) when is_map(map) do
Map.new(map, fn
{k, v} when is_map(v) ->
{snakecase(k), deep_snakecase_keys(v)}
{k, l} when is_list(l) ->
{snakecase(k), Enum.map(l, fn v -> deep_snakecase_keys(v) end)}
{k, v} ->
{snakecase(k), v}
end)
end
def deep_snakecase_keys(other), do: other
# private
# ----------------------------------------------------------------------------
defp camelize(key) when is_atom(key) do
Atom.to_string(key) |> Recase.to_camel()
end
defp camelize(key) when is_binary(key) do
# key
case(String.match?(key, ~r/[A-Z]+/)) do
true ->
key
false ->
Atom.to_string(key) |> Recase.to_camel()
end
end
defp snakecase(key) do
Recase.to_snake(key) |> Atom.from_string()
end
end