aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ttwhy/io.cppm22
1 files changed, 11 insertions, 11 deletions
diff --git a/ttwhy/io.cppm b/ttwhy/io.cppm
index cbd3902..353bdfa 100644
--- a/ttwhy/io.cppm
+++ b/ttwhy/io.cppm
@@ -27,11 +27,9 @@ namespace ttwhy::io
}
export template<typename InputStream, typename ErrorStream>
- auto read(InputStream & input_stream, ErrorStream & error_stream)
- -> asio::awaitable<std::expected<std::string, asio::error_code>>
+ auto read(std::span<char> data, InputStream & input_stream, ErrorStream & error_stream)
+ -> asio::awaitable<std::expected<std::size_t, asio::error_code>>
{
- auto data = std::string{15, '\0'};
-
auto [error, read] = co_await input_stream.async_read_some(asio::buffer(data), asio::as_tuple(asio::use_awaitable));
if (error)
@@ -41,12 +39,11 @@ namespace ttwhy::io
co_return std::unexpected{error};
}
- data.resize(read);
- co_return data;
+ co_return read;
}
export template<typename OutputStream, typename ErrorStream>
- auto write(std::string const & string, OutputStream & output_stream, ErrorStream & error_stream)
+ auto write(std::span<char const> string, OutputStream & output_stream, ErrorStream & error_stream)
-> asio::awaitable<asio::error_code>
{
auto [error, written] =
@@ -65,15 +62,18 @@ namespace ttwhy::io
auto echo(InputStream & input_stream, OutputStream & output_stream, ErrorStream & error_stream)
-> asio::awaitable<asio::error_code>
{
+ auto input = std::array<char, 16>{};
+
while (true)
{
- auto input = co_await read(input_stream, error_stream);
- if (!input.has_value())
+ auto read_result = co_await read(input, input_stream, error_stream);
+ if (!read_result.has_value())
{
- co_return input.error();
+ co_return read_result.error();
}
- auto write_error = co_await write(input.value(), output_stream, error_stream);
+ auto to_write = std::span{input.data(), read_result.value()};
+ auto write_error = co_await write(to_write, output_stream, error_stream);
if (write_error)
{
co_return write_error;