Функция copy_ buf
pub async fn copy_buf<'a, R, W>(
reader: &'a mut R,
writer: &'a mut W,
) -> Result<u64>
io-util.Асинхронно копирует всё содержимое средства чтения в средство записи.
Эта функция возвращает future, который будет непрерывно считывать данные из reader, а затем записывать их в writer в потоковом режиме, пока reader не вернёт EOF или не завершится с ошибкой.
В случае успеха возвращается общее количество байтов, скопированных из reader в writer.
Это альтернатива tokio::io::copy для средств чтения AsyncBufRead, не требующая выделения дополнительного буфера, поскольку AsyncBufRead позволяют получить доступ к внутреннему буферу средства чтения.
Когда использовать асинхронные альтернативы вместо SyncIoBridge
Если вы хотите использовать std::io::copy с синхронным потребителем (например, hasher или компрессором), рассмотрите возможность использовать асинхронные альтернативы вместо обёртывания средства чтения в SyncIoBridge. Подробные примеры и рекомендации по хешированию, сжатию и разбору данных см. в документации SyncIoBridge.
Ошибки
Возвращённый future завершится с ошибкой и немедленно вернёт ошибку, если какой-либо вызов poll_fill_buf или poll_write завершится с ошибкой.
Примеры
use tokio::io;
let mut reader: &[u8] = b"hello";
let mut writer: Vec<u8> = vec![];
io::copy_buf(&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_buf.html