lib/lexdee/response.ex

defmodule Lexdee.Response do
  @behaviour Tesla.Middleware

  def call(env, next, _options) do
    env
    |> Tesla.run(next)
    |> case do
      {:ok, %{status: status, body: %{"metadata" => response}} = env}
      when status in [200, 201, 202] ->
        {:ok, %{env | body: response}}

      {:ok, %{status: status} = env} when status in [200] ->
        {:ok, env}

      {:ok, %{body: response}} ->
        {:error, response}

      {:error, reason} ->
        {:error, reason}
    end
  end
end