# `Quiver.Conn.HTTP1.Parse`
[🔗](https://github.com/edlontech/quiver/blob/main/lib/quiver/conn/http1/parse.ex#L1)

Incremental HTTP/1.1 response parser.

Operates as a state machine. Feed bytes via `parse/2`, get back
parsed response fragments, updated state, and unconsumed bytes.

# `chunk_state`

```elixir
@type chunk_state() ::
  :chunk_size
  | {:chunk_data, non_neg_integer()}
  | :chunk_crlf
  | {:chunk_trailers, [{String.t(), String.t()}]}
```

# `parse_state`

```elixir
@type parse_state() ::
  :idle
  | :status
  | {:headers, non_neg_integer(), [{String.t(), String.t()}]}
  | {:body_content_length, non_neg_integer()}
  | {:body_chunked, chunk_state()}
  | :body_until_close
```

# `response_fragment`

```elixir
@type response_fragment() ::
  {:status, non_neg_integer()}
  | {:headers, [{String.t(), String.t()}]}
  | {:trailers, [{String.t(), String.t()}]}
  | {:data, binary()}
  | :done
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
