defmodule ExWeb.Router do require Logger defmacro __using__(_opts) do quote do use Plug.ErrorHandler def render(conn, module, page \\ :index, assigns \\ %{}) def render(conn, module, page, assigns) do ExWeb.render(conn, module, page, assigns) end def render_if_failed(conn, module, page \\ :index, assigns \\ %{}) def render_if_failed(conn, module, page, assigns) do ExWeb.render_if_failed(conn, module, page, assigns) end def render_if_successful(conn, module, page \\ :index, assigns \\ %{}) def render_if_successful(conn, module, page, assigns) do ExWeb.render_if_successful(conn, module, page, assigns) end def redirect_to(conn, url, params \\ %{}, body \\ nil) do ExWeb.redirect_to(conn, url, params, body) end def redirect_to_if_successful(conn, url, params \\ %{}, body \\ nil) do ExWeb.redirect_to_if_successful(conn, url, params, body) end def redirect_to_if_failed(conn, url, params \\ %{}, body \\ nil) do ExWeb.redirect_to_if_failed(conn, url, params, body) end def validate(conn, module, function, commit_function) do ExWeb.validate(conn, module, function, commit_function) end def forms(conn, module, form) do ExWeb.forms(conn, module, form) end def add_url_for(%{assigns: assigns} = conn, url, opts \\ []) do ExWeb.add_url_for(conn, url, opts) end def handle_errors(%{state: :sent} = conn, _) do conn end def handle_errors(conn, %{kind: _, reason: %FunctionClauseError{arity: 4, function: :do_match, module: unquote(__CALLER__.module)}, stack: _}) do ExWeb.Errors.render(conn, 404) end def handle_errors(conn, %{kind: kind, reason: reason, stack: stack}) do ExWeb.Errors.render(conn, 500) end defoverridable [handle_errors: 2] end end end