Функция copy
pub async fn copy<'a, R, W>(reader: &'a mut R, writer: &'a mut W) -> Result<u64>
io-util.Асинхронно копирует всё содержимое средства чтения в средство записи.
Эта функция возвращает future, который будет непрерывно считывать данные из reader, а затем записывать их в writer потоковым способом, пока reader не вернёт EOF или не завершится с ошибкой.
В случае успеха возвращается общее количество байтов, скопированных из reader в writer.
Это асинхронная версия std::io::copy.
Для передачи данных от средства чтения к средству записи создаётся буфер копирования размером 8 КБ, выделенный в куче. Если вам нужна альтернатива для AsyncBufRead, см. copy_buf. Вы можете использовать copy_buf с BufReader, чтобы изменить размер буфера.
Когда использовать асинхронные альтернативы вместо SyncIoBridge
Если вы хотите использовать std::io::copy с синхронным потребителем (например, hasher или компрессором), рассмотрите возможность использования асинхронных альтернатив вместо обёртывания средства чтения в SyncIoBridge. Подробные примеры и рекомендации см. в документации SyncIoBridge.
Ошибки
Возвращённый future немедленно вернёт ошибку, если любой вызов poll_read или poll_write завершится с ошибкой.
Примеры
use tokio::io;
let mut reader: &[u8] = b"hello";
let mut writer: Vec<u8> = vec![];
io::copy(&mut reader, &mut writer).await?;
assert_eq!(&b"hello"[..], &writer[..]);
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/io/fn.copy.html