Rust Tokio TCP サーバーがあります。各クライアントは、次のような Tokio future チェーンによって処理されます。
let stream = <TcpStream from elsewhere>;
let task = database_connection
.and_then(connection| {
tokio::io::write_all(stream, SomeSuccessData);
}).map_err(|error| {
tokio::io::write_all(stream, SomeErrorData(error));
});
...
tokio::spawn(task);
問題は、ストリームを順次使用することになっているにもかかわらず、ストリームを消費するTcpStream
ため、チェーンの複数のブランチで同じものを使用できないことです。tokio::io::write_all
たとえば、データベース エラーが発生したかどうかに応じて、異なるデータを送信することが重要です。
どうすればこの問題を克服できますか? 多分別のAPIがありますか?