lib/soap/response.ex

defmodule Soap.Response do
  @moduledoc """
  Struct for response given by soap call.
  """

  defstruct body: nil, headers: [], request_url: nil, status_code: nil

  @type t :: %__MODULE__{
          body: any(),
          headers: list(tuple()),
          request_url: String.t(),
          status_code: pos_integer()
        }

  alias Soap.Response.Parser

  @doc """
  Executing with xml response body as string.

  Function `parse/1` returns a full parsed response structure as map.
  """
  @spec parse(__MODULE__.t() | String.t(), integer()) :: map()
  def parse(%Soap.Response{body: body, status_code: status_code}), do: parse(body, status_code)
  def parse(body, status_code) when status_code >= 400, do: Parser.parse(body, :fault)
  def parse(body, _status_code), do: Parser.parse(body, :successful)
end