TeslaKeys.Middleware.Case (tesla_keys v0.1.2)

Tesla middleware for converting the request and response body keys. This middleware will convert all the keys from the request body using the function defined in the options before executing the request, and will convert all the keys from the response body using the function defined in options after getting the response

Examples

defmodule MyClient do
  use Tesla
  plug TeslaKeys.Middleware.Case # use defaults
  # or
  plug TeslaKeys.Middleware.Case, encoder: &Recase.to_camel/1, serializer: &Recase.Enumerable.atomize_keys/2
  # or
  plug TeslaKeys.Middleware.Case, encoder: &String.upcase/1, serializer: &serializer/2

  defp serializer(data, encoder) when is_map(data), do: Map.new(data, fn {key, value} -> {then(key, encoder), value} end)
  defp serializer(data, encoder) when is_list(data), do: Enum.map(data, &serializer(&1, encoder))
  defp serializer(data, _encoder), do: data
end

Options

  • :serializer - serializer function with arity 2, receives the data as the first parameter and the :encoder as the second parameter, (defaults to &Recase.Enumerable.stringify_keys/2)
  • :encoder - encoding function, e.g &Recase.to_camel/1, &Recase.to_pascal/1 (defaults to &Recase.to_camel/1)
  • :decoder - decoding function (defaults to &Recase.to_snake/1)