pub fn read_basic_header<R: AsyncRead>(
reader: Pin<&mut R>,
) -> BasicHeaderReader<'_, R>
Expand description
Reads a basic header from streams.
ยงExamples
use std::{
io::Result as IOResult,
pin::pin
};
use sheave_core::{
messages::headers::{
BasicHeader,
MessageFormat::*
},
readers::read_basic_header
};
#[tokio::main]
async fn main() -> IOResult<()> {
// In case of 1 byte.
let reader = ((New as u8) << 6 | 2).to_be_bytes();
let result = read_basic_header(pin!(reader.as_slice())).await?;
assert_eq!(New, result.get_message_format());
assert_eq!(2, result.get_chunk_id());
// In case of 2 bytes.
let mut reader: [u8; 2] = [0; 2];
reader[0] = (New as u8) << 6;
reader[1] = 2;
let result = read_basic_header(pin!(reader.as_slice())).await?;
assert_eq!(New, result.get_message_format());
assert_eq!(66, result.get_chunk_id());
// In case of 3 bytes.
let mut reader: [u8; 3] = [0; 3];
reader[0] = (New as u8) << 6 | 1;
reader[1..].copy_from_slice((2 as u16).to_le_bytes().as_slice());
let result = read_basic_header(pin!(reader.as_slice())).await?;
assert_eq!(New, result.get_message_format());
assert_eq!(66, result.get_chunk_id());
Ok(())
}