use tokio::io::{AsyncRead, AsyncReadExt};
use anyhow::Result;
pub async fn read_frame<R>(reader: &mut R) -> Result<Vec<u8>>
where
R: AsyncRead + Unpin, {
let mut len_buf = [0u8; 4]; reader.read_exact(&mut len_buf).await?; let len = u32::from_be_bytes(len_buf) as usize; let mut data = vec![0u8; len]; reader.read_exact(&mut data).await?; Ok(data) }