defmodule Wiki.Util do @moduledoc """ Internal utilities. """ @version Mix.Project.config()[:version] @doc false @spec default_user_agent() :: String.t() def default_user_agent do "mediawiki_client_ex/#{@version} (techwish-devs@wikimedia.de)" end end defmodule Wiki.Error do @moduledoc false # TODO: more nuanced error types that can be matched by consumers. @doc false defexception [:message] end defmodule Wiki.ReqDebug do @moduledoc false require Logger @doc false @spec attach(Req.Request.t(), keyword) :: Req.Request.t() def attach(%Req.Request{} = request, opts) do request |> step_maybe_debug(opts[:debug]) end defp step_maybe_debug(request, true) do Req.Request.append_response_steps(request, debug: fn {request, response} -> debug_query = fn nil -> [] query -> "Query: #{query}" end debug_headers = fn headers -> Enum.map(headers, fn {k, v} -> [k, ": ", v, ?\n] end) end debug_body = fn body -> # TODO: pretty-print json and multi-part inspect(body) end [ "\n>>> REQUEST >>>\n", debug_query.(request.url.query), ?\n, debug_headers.(request.headers), ?\n, debug_body.(request.body), ?\n, "\n<<< RESPONSE <<<\n", debug_headers.(response.headers), ?\n, debug_body.(response.body) ] |> Logger.debug() {request, response} end ) end defp step_maybe_debug(request, _), do: request end