sheave_core::writers

Function write_basic_header

Source
pub fn write_basic_header<'a, W: AsyncWrite>(
    writer: Pin<&'a mut W>,
    basic_header: &'a BasicHeader,
) -> BasicHeaderWriter<'a, W>
Expand description

Writes a basic header into streams.

ยงExamples

use std::{
    io::Result as IOResult,
    pin::{
        Pin,
        pin
    }
};
use sheave_core::{
    messages::headers::{
        BasicHeader,
        MessageFormat::*
    },
    writers::write_basic_header
};

#[tokio::main]
async fn main() -> IOResult<()> {
    // In case of 1 byte.
    let mut writer: Pin<&mut Vec<u8>> = pin!(Vec::new());
    let message_format = New;
    let chunk_id = 2u16;
    let basic_header = BasicHeader::new(message_format, chunk_id);
    let result = write_basic_header(writer.as_mut(), &basic_header).await;
    assert!(result.is_ok());
    assert_eq!(message_format as u8, writer[0] >> 6);
    assert_eq!(chunk_id, (writer[0] << 2 >> 2) as u16);

    // In case of 2 bytes.
    let mut writer: Pin<&mut Vec<u8>> = pin!(Vec::new());
    let message_fomrat = New;
    let chunk_id = 64u16;
    let basic_header = BasicHeader::new(message_fomrat, chunk_id);
    let result = write_basic_header(writer.as_mut(), &basic_header).await;
    assert!(result.is_ok());
    assert_eq!(message_format as u8, writer[0] >> 6);
    assert_eq!(0, writer[0] << 2 >> 2);
    assert_eq!(0, writer[1] as u16);

    // In case of 3 bytes.
    let mut writer: Pin<&mut Vec<u8>> = pin!(Vec::new());
    let message_format = New;
    let chunk_id = 320u16;
    let basic_header = BasicHeader::new(message_format, chunk_id);
    let result = write_basic_header(writer.as_mut(), &basic_header).await;
    let mut written: [u8; 2] = [0; 2];
    written.copy_from_slice(&writer[1..]);
    let written = u16::from_le_bytes(written);
    assert!(result.is_ok());
    assert_eq!(message_format as u8, writer[0] >> 6);
    assert_eq!(1, writer[0] << 2 >> 2);
    assert_eq!(256, written);
    Ok(())
}