5#include <boost/assert.hpp>
34 template <
typename Stream>
101 std::unique_ptr<uv_stream_t, UvHandleDeleter>
stream_;
103 std::optional<std::coroutine_handle<>>
reader_;
104 std::optional<std::coroutine_handle<>>
writer_;
114 std::optional<std::coroutine_handle<>>
handle_;
129 static void allocate(uv_handle_t *handle,
size_t suggested_size,
132 const uv_buf_t *buf);
137 std::optional<std::coroutine_handle<>>
handle_;
151 std::optional<std::coroutine_handle<>>
handle_;
A plain stream, permitting reading, writing, and closing.
Definition stream.h:32
Promise< void > shutdown()
Definition stream.cc:78
Promise< std::optional< std::string > > read(size_t maxSize=defaultMaxReadSize)
Definition stream.cc:50
static constexpr size_t defaultMaxReadSize
Definition stream.h:43
StreamBase & operator=(const StreamBase &)=delete
std::optional< std::coroutine_handle<> > reader_
Definition stream.h:103
StreamBase(StreamBase &&)=default
uv_stream_t & stream()
Definition stream.h:91
Promise< void > close()
Definition stream.cc:89
StreamBase & operator=(StreamBase &&)=default
const uv_stream_t * underlying() const
Return the underlying UV stream object.
Definition stream.h:88
virtual ~StreamBase()
Definition stream.cc:28
Promise< size_t > write(std::string buf)
Definition stream.cc:69
StreamBase(const StreamBase &)=delete
std::optional< std::coroutine_handle<> > writer_
Definition stream.h:104
void destroyStream()
Definition stream.h:95
StreamBase(std::unique_ptr< Stream > stream)
Definition stream.h:35
std::unique_ptr< uv_stream_t, UvHandleDeleter > stream_
Definition stream.h:101
TtyStream & operator=(TtyStream &&)=default
static TtyStream tty(const Loop &loop, int fd)
Definition stream.cc:40
TtyStream(TtyStream &&other)=default
TtyStream & operator=(const TtyStream &)=delete
~TtyStream() override=default
TtyStream(const TtyStream &other)=delete
TtyStream(std::unique_ptr< uv_tty_t > stream)
Definition stream.h:182
static TtyStream stdin(const Loop &loop)
Definition stream.h:177
static TtyStream stdout(const Loop &loop)
Definition stream.h:178
static TtyStream stderr(const Loop &loop)
Definition stream.h:179
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22
Definition async_work.cc:17
std::optional< ssize_t > status_
Definition stream.h:136
bool await_ready()
Definition stream.cc:104
InStreamAwaiter_(StreamBase &stream, std::span< char > buffer)
Definition stream.h:119
static void allocate(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf)
Definition stream.cc:143
std::span< char > buffer_
Definition stream.h:135
void start_read()
Definition stream.cc:152
std::optional< std::coroutine_handle<> > handle_
Definition stream.h:137
size_t await_resume()
Definition stream.cc:125
void stop_read()
Definition stream.cc:157
StreamBase & stream_
Definition stream.h:134
bool await_suspend(std::coroutine_handle<> handle)
Definition stream.cc:115
static void onInStreamRead(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf)
Definition stream.cc:162
std::optional< uv_status > status_
Definition stream.h:152
std::array< uv_buf_t, 1 > prepare_buffers() const
Definition stream.cc:182
OutStreamAwaiter_(StreamBase &stream, std::string_view buffer)
Definition stream.cc:178
StreamBase & stream_
Definition stream.h:157
uv_status await_resume()
Definition stream.cc:214
uv_write_t write_
Definition stream.h:156
std::string_view buffer_
Definition stream.h:155
bool await_suspend(std::coroutine_handle<> handle)
Definition stream.cc:199
std::optional< std::coroutine_handle<> > handle_
Definition stream.h:151
bool await_ready()
Definition stream.cc:189
static void onOutStreamWrite(uv_write_t *write, uv_status status)
Definition stream.cc:224
ShutdownAwaiter_()=default
static void onShutdown(uv_shutdown_t *req, uv_status status)
Definition stream.cc:252
bool await_ready()
Definition stream.cc:236
bool await_suspend(std::coroutine_handle<> handle)
Definition stream.cc:238
std::optional< uv_status > status_
Definition stream.h:115
std::optional< std::coroutine_handle<> > handle_
Definition stream.h:114
void await_resume()
Definition stream.cc:245