Line data Source code
1 : #ifndef THINGER_HTTP_DATA_OUT_DATA_HPP
2 : #define THINGER_HTTP_DATA_OUT_DATA_HPP
3 :
4 : #include <memory>
5 : #include <functional>
6 : #include <boost/asio.hpp>
7 : #include "../../asio/sockets/socket.hpp"
8 : #include "../../util/types.hpp"
9 :
10 : namespace thinger::http::data {
11 :
12 : class out_data {
13 :
14 : public:
15 4005 : out_data() = default;
16 4014 : virtual ~out_data() = default;
17 :
18 1752 : virtual awaitable<size_t> to_socket(std::shared_ptr<thinger::asio::socket> socket) {
19 : std::vector<boost::asio::const_buffer> buffer;
20 : fill_buffer(buffer);
21 : co_return co_await socket->write(buffer);
22 3504 : }
23 :
24 : void set_next_data(std::shared_ptr<out_data> data) {
25 : data_ = data;
26 : }
27 :
28 : virtual size_t get_size() = 0;
29 : virtual void to_buffer(std::vector<boost::asio::const_buffer>& buffer) const = 0;
30 :
31 : protected:
32 1752 : void fill_buffer(std::vector<boost::asio::const_buffer>& buffer) {
33 1752 : to_buffer(buffer);
34 1752 : if (data_) {
35 0 : data_->fill_buffer(buffer);
36 : }
37 1752 : }
38 :
39 0 : virtual bool supports_buffer() {
40 0 : return true;
41 : }
42 :
43 : private:
44 : std::shared_ptr<out_data> data_;
45 : };
46 :
47 : }
48 :
49 : #endif
|