xrpld
Loading...
Searching...
No Matches
SimpleWriter.h
1#pragma once
2
3#include <xrpl/server/Writer.h>
4
5#include <boost/beast/core/multi_buffer.hpp>
6#include <boost/beast/core/ostream.hpp>
7#include <boost/beast/http/message.hpp>
8#include <boost/beast/http/write.hpp>
9
10#include <cstddef>
11#include <functional>
12#include <iterator>
13#include <vector>
14
15namespace xrpl {
16
20class SimpleWriter : public Writer
21{
22 boost::beast::multi_buffer sb_;
23
24public:
25 template <bool IsRequest, class Body, class Fields>
26 explicit SimpleWriter(boost::beast::http::message<IsRequest, Body, Fields> const& msg)
27 {
28 boost::beast::ostream(sb_) << msg;
29 }
30
31 bool
32 complete() override
33 {
34 return sb_.size() == 0;
35 }
36
37 void
38 consume(std::size_t bytes) override
39 {
40 sb_.consume(bytes);
41 }
42
43 bool
44 prepare(std::size_t bytes, std::function<void(void)>) override
45 {
46 return true;
47 }
48
50 data() override
51 {
52 auto const& buf = sb_.data();
54 result.reserve(std::distance(buf.begin(), buf.end()));
55 for (auto const b : buf)
56 result.emplace_back(b);
57 return result;
58 }
59};
60
61} // namespace xrpl
SimpleWriter(boost::beast::http::message< IsRequest, Body, Fields > const &msg)
void consume(std::size_t bytes) override
Removes bytes from the input sequence.
bool complete() override
Returns true if there is no more data to pull.
bool prepare(std::size_t bytes, std::function< void(void)>) override
Add data to the input sequence.
std::vector< boost::asio::const_buffer > data() override
Returns a ConstBufferSequence representing the input sequence.
boost::beast::multi_buffer sb_
T distance(T... args)
T emplace_back(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
T reserve(T... args)