 end
 
 defmodule Tesla.Builder do
+  @http_verbs ~w(head get delete trace options post put patch)a
+  
   defmacro __using__(_opts) do
     quote do
       Module.register_attribute(__MODULE__, :__middleware__, accumulate: true)

        Tesla.perform_request(__MODULE__, options)
      end

      unquote(generate_api(:head))
      unquote(generate_api(:get))
      unquote(generate_api(:delete))
      unquote(generate_api(:trace))
      unquote(generate_api(:options))
      unquote(generate_api(:post))
      unquote(generate_api(:put))
      unquote(generate_api(:patch))

      import Tesla.Builder, only: [plug: 1, plug: 2, adapter: 1, adapter: 2]
      @before_compile Tesla.Builder

  defmacro adapter(adapter, opts \\ nil) do
    adapter = Tesla.alias(adapter)
    quote do: @__adapter__ {unquote(adapter), unquote(opts)}
  end
  
  defp generate_http_verbs do
    Enum.map @http_verbs, &generate_api/1
  end

  defp generate_api(method) when method in [:post, :put, :patch] do
