lib/transmogrify/index.ex

defmodule Transmogrify do
  @moduledoc """
  Accepts data with different shapes and changes them to an expected shape, such
  as switching keys in a map to camel case, or all string keys to atom keys, etc.

  Three primary sections:

  * [Transmogrifier](Transmogrify.Transmogrifier.html#transmogrify/2) — convert maps and list keys and values.
  * [As](Transmogrify.As.html) — Simple data polymorphic conversions (as_atom/1) for example.
  * Case and Path conversions (camelcase/snakecase, etc) — see below
  """

  @spec transmogrify(data :: map() | list(), opts :: map() | keyword()) ::
          result :: map() | list()
  def transmogrify(data, opts \\ %{key_convert: :atom, key_case: :snake})
  defdelegate transmogrify(data, opts), to: Transmogrify.Transmogrifier

  @spec camelcase(binary()) :: binary()
  defdelegate camelcase(x), to: Transmogrify.Camelcase, as: :convert

  @spec snakecase(binary()) :: binary()
  defdelegate snakecase(x), to: Transmogrify.Snakecase, as: :convert

  @spec pascalcase(binary()) :: binary()
  defdelegate pascalcase(x), to: Transmogrify.Pascalcase, as: :convert
  @spec modulename(binary()) :: binary()
  defdelegate modulename(x), to: Transmogrify.Modulename, as: :convert

  @spec pathname(binary()) :: binary()
  defdelegate pathname(x), to: Transmogrify.Pathname, as: :convert
end