lib/maxwell/builder/middleware.ex

defmodule Maxwell.Builder.Middleware do
  @moduledoc """
  Methods for setting up middlewares.
  """

  @doc """
   Build middleware macro.

   * `middleware` - middleware module, for example: `Maxwell.Middleware.Json`.
   * `opts` - options setting in compile time, default is `[]`, for example: `[encode_func: &Poison.encode/1]`.

  ### Examples
        @middleware Middleware.Module, []

  """
  defmacro middleware(middleware, opts \\ []) do
    quote do
      @middleware {unquote(middleware), unquote(middleware).init(unquote(opts))}
    end
  end
end