sheave_core::readers

Function read_basic_header

Source
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(())
}