use std::io::Result;
use tokio::io::{AsyncRead, AsyncWrite, BufReader, AsyncReadExt};
pub const SUGGESTED_BUFFER_SIZE: usize = 16384;
pub async fn copy<R, W>(reader: &mut R, writer: &mut W, buf_size: usize) -> Result<()>
where R: AsyncRead + Unpin, W: AsyncWrite + Unpin
{
let mut buf_reader = BufReader::with_capacity(buf_size, reader);
tokio::io::copy_buf(&mut buf_reader, writer).await?;
Ok(())
}
pub async fn read_string<R: AsyncRead + Unpin>(reader: &mut R, length: usize) -> Result<String> {
let mut buffer = String::with_capacity(length);
reader.take(length as u64).read_to_string(&mut buffer).await?;
Ok(buffer)
}
pub async fn read_bytes<R: AsyncRead + Unpin>(reader: &mut R, length: usize) -> Result<Vec<u8>> {
let mut buffer = Vec::with_capacity(length);
reader.take(length as u64).read_to_end(&mut buffer).await?;
Ok(buffer)
}