A [*BodyWriter] provides an [@https://en.wikipedia.org/wiki/Online_algorithm online algorithm] to obtain a sequence of zero or more buffers from a body during serialization. The implementation creates an instance of this type when needed, and calls into it one or more times to retrieve buffers holding body octets. The interface of [*BodyWriter] is intended to obtain buffers for these scenarios:
* A body that does not entirely fit in memory. * A body produced incrementally from coroutine output. * A body represented by zero or more buffers already in memory. * A body whose size is not known ahead of time. * Body data generated dynamically from other threads. * Body data computed algorithmically.
* `a` denotes a value of type `W`. * `h` denotes a const value of type `header<isRequest, Fields> const&`. * `v` denotes a possibly const value of type `Body::value_type&`. * `ec` is a value of type [link beast.ref.boost__beast__error_code `error_code&`]. * `W<T>` is the type `boost::optional<std::pair<T, bool>>`.
Constructible from `h` and `v`. The lifetime of `h` and `v` are guaranteed to end no earlier than after the `W` is destroyed. The writer shall not access the contents of `h` or `v` before the first call to `init`, permitting lazy construction of the message. The constructor may optionally require that `h` and `v` are `const` references, with these consequences: * If `W` requires that `h` and `v` are const references, then the corresponding serializer constructors for messages with this body type will will accept a const reference to a message, otherwise: * If `W` requires that `h` and `v` are non-const references, then the corresponding serializer constructors for messages with this body type will require a non-const reference to a message.
Called once to fully initialize the object before any calls to `get`. The message body becomes valid before entering this function, and remains valid until the writer is destroyed. The function will ensure that `!ec` is `true` if there was no error or set to the appropriate error code if there was one.