lib/ptax/requests/case.ex
defmodule PTAX.Requests.Case do
@moduledoc "Converte request para camel case e response para snake case"
@behaviour Tesla.Middleware
@impl true
def call(env, next, _opts) do
env
|> encode()
|> Tesla.run(next)
|> decode()
end
defp encode(%{body: nil} = env), do: env
defp encode(%{body: body} = env), do: %{env | body: Casex.to_camel_case(body)}
defp decode({:ok, env}), do: {:ok, Map.update!(env, :body, &Casex.to_snake_case/1)}
defp decode({:error, error}), do: {:error, error}
end