Crate const_writer[][src]

Provides ConstWriter abstraction to write constant amount of bytes with compile time checks

Result of fun experiment with const_generics and const_evaluatable_checked features

use const_writer::ConstWrite;

let mut vec = vec![];
{
    let writer = vec.const_writer::<10>() // reserve 10 bytes in vec
        .write_u32_le(12)  // no runtime checks
        .write_u32_le(34); // no runtime checks

    assert_eq!(writer.remaining(), 2);
}
assert_eq!(vec.len(), 8);
assert_eq!(&vec[0..8], &[12, 0, 0, 0, 34, 0, 0, 0]);
use const_writer::ConstWrite;

let mut buff = [0u8; 1024];
buff.as_mut().const_writer::<10>()
    .write_slice(&[1, 2, 3, 4, 5, 6])
    .write_u64_le(111); // compile error.

Usage in functions

use const_writer::{ConstWriterAdapter, ConstWriter, ConstWrite};

// write 10 bytes
fn write_struct<T: ConstWriterAdapter>(writer: ConstWriter<T, 10>) {
    writer
        .write_u16_le(34)
        .write_u16_le(2)
        .write_u16_le(3)
        .write_u16_le(4)
        .write_u16_le(5);
}

let mut buff = [0u8; 16];
write_struct(buff.as_mut().const_writer());
assert_eq!(buff, [34, 0, 2, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0]);

Modules

slice
vec

Structs

ConstWriter

Writer that keeping track of space left using const_generic params.

Traits

ConstWrite

Get ConstWriter for given type

ConstWriterAdapter

Source of all performance of crate. Provide unsafe interface to underlying buffer.

ConstWriterAdapterCreate

Trait for creating ConstWriterAdapter Creation moved to separate trait to omit lifetime parameter on ConstWriter