defmodule Tz.HTTP.HTTPResponse do defstruct status_code: nil, headers: nil, body: [], complete?: false def parse([{:status, _, status_code} | mint_messages], %__MODULE__{} = http_response) do parse(mint_messages, %{http_response | status_code: status_code}) end def parse([{:headers, _, headers} | mint_messages], %__MODULE__{} = http_response) do parse(mint_messages, %{http_response | headers: headers}) end def parse([{:data, _, data} | mint_messages], %__MODULE__{} = http_response) do parse(mint_messages, %{http_response | body: [data | http_response.body]}) end def parse([{:done, _}], %__MODULE__{} = http_response) do {:ok, %{http_response | body: Enum.reverse(http_response.body), complete?: true}} end def parse([], http_response), do: {:ok, http_response} end