         body: false
       }, :keepalive, {:complete, ""}, ""}}
   """
+  @spec parse_response(binary) ::
+          {:ok, {Raxx.Response.t(), connection_status, body_read_state, binary}}
   def parse_response(buffer) do
     case :erlang.decode_packet(:http_bin, buffer, []) do
       {:ok, {:http_response, {1, 1}, status, _reason_phrase}, rest} ->

      ...> |> to_string()
      "0\\r\\n\\r\\n"
  """
  def serialize_chunk(data) do
    size = :erlang.iolist_size(data)
    [:erlang.integer_to_list(size, 16), "\r\n", data, "\r\n"]
  end

  @doc """
  """
  def parse_chunk(buffer) do
    case String.split(buffer, "\r\n", parts: 2) do
      [base_16_size, rest] ->

  - Property of serialize then decode the head should end up with the same struct
  - Propery of any number of splits in the binary should not change the output
  """

  @type connection_status :: nil | :close | :keepalive
  @type body_read_state :: {:complete, binary} | {:bytes, non_neg_integer} | :chunked

  @crlf "\r\n"

