use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
use std::io;
pub async fn write_frame<W>(writer: &mut W, payload: &[u8]) -> io::Result<()>
where
W: AsyncWrite + Unpin,
{
let len = payload.len() as u32;
writer.write_u32(len).await?;
writer.write_all(payload).await?;
Ok(())
}
pub async fn read_frame<R>(reader: &mut R) -> io::Result<Vec<u8>>
where
R: AsyncRead + Unpin,
{
let len = reader.read_u32().await?;
let mut payload = vec![0u8; len as usize];
reader.read_exact(&mut payload).await?;
Ok(payload)
}