defmodule XRPL.Middleware.Error do @moduledoc """ Makes requests that don't respond to HTTP Success codes to return as a error ### Example usage ``` defmodule MyClient do use Tesla plug(XRPL.Middleware.Error) end ``` """ @behaviour Tesla.Middleware def call(env, next, _options) do env |> Tesla.run(next) |> check_status() |> check_body() end def check_status({:ok, env}) do case env.status do s when s in [200, 201, 202, 203, 204] -> {:ok, env} _ -> {:error, env} end end def check_body({:error, error}), do: {:error, error} def check_body({:ok, env}) do if Map.has_key?(env.body["result"], "error") do {:error, env} else {:ok, env} end end end