diff --git a/core/reactor.hh b/core/reactor.hh index ddc52a2b6e..ae08f7bbed 100644 --- a/core/reactor.hh +++ b/core/reactor.hh @@ -450,6 +450,28 @@ public: future> get() { return _dsi->get(); } }; +class data_sink_impl { +public: + virtual ~data_sink_impl() {} + virtual future<> put(std::vector> data) = 0; +}; + +class data_sink { + std::unique_ptr _dsi; +public: + explicit data_sink(std::unique_ptr dsi) : _dsi(std::move(dsi)) {} + data_sink(data_sink&& x) = default; + future<> put(std::vector> data) { + return _dsi->put(std::move(data)); + } + future<> put(temporary_buffer data) { + std::vector> v; + v.reserve(1); + v.push_back(std::move(data)); + return put(std::move(v)); + } +}; + class posix_data_source_impl final : public data_source_impl { pollable_fd& _fd; temporary_buffer _buf;