[/
    Copyright (c) 2013-2016 Vinnie Falco (vinnie dot falco at gmail dot com)

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
]

[section:Parser Parser]

A [*`Parser`] is used to deserialize HTTP/1 messages from [link beast.types.streams streams].
Objects of this type are used with [link beast.ref.http__parse http::parse] and
[link beast.ref.http__async_parse http::async_parse].

In this table:

* `X` denotes a type meeting the requirements of [*`Parser`].

* `a` denotes a value of type `X`.

* `b` is a value meeting the requirements of [@http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/reference/ConvertibleToConstBuffer.html [*`ConvertibleToConstBuffer`]].

* `ec` is a value of type [link beast.ref.error_code `error_code&`].

[table Parser requirements
[[operation] [type] [semantics, pre/post-conditions]]
[
    [`a.complete()`]
    [`bool`]
    [
        Returns `true` when a complete HTTP/1 message has been parsed.
    ]
]
[
    [`a.write(b, ec)`]
    [`std::size_t`]
    [
        Parses the octets in the specified input buffer sequentially until
        an error occurs, the end of the buffer is reached, or a complete
        HTTP/1 message has been parsed. If an error occurs, `ec` is set
        to the error code and parsing stops. This function returns the
        number of bytes consumed from the input buffer.
    ]
]
[
    [`a.write_eof(ec)`]
    [`void`]
    [
        Indicates to the parser that no more octets will be available.
        Typically this function is called when the end of stream is reached.
        For example, if a call to `boost::asio::ip::tcp::socket::read_some`
        generates a `boost::asio::error::eof` error. Some HTTP/1 messages
        determine the end of the message body by an end of file marker or
        closing of the connection.
    ]
]
]

[endsect]
