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