bitcode_lightyear_patch 0.5.1

bitcode is a bitwise binary serializer
Documentation
use crate::encoding::bit_string::bit_utils::{pack_lsb, unpack_lsb};
use crate::encoding::bit_string::ByteEncoding;
use crate::encoding::prelude::*;

#[derive(Copy, Clone)]
pub struct AsciiLowercase;

impl AsciiLowercase {
    const DATA_MASK: Word = Word::from_le_bytes([0b00011111; 8]);
    const SET_MASK: Word = Word::from_le_bytes([0b01100000; 8]);
}

impl ByteEncoding for AsciiLowercase {
    const BITS_PER_BYTE: usize = 5;

    #[inline(always)]
    fn validate(word: Word, bytes: usize) -> bool {
        let extra_bits = WORD_BITS - (bytes * u8::BITS as usize);
        word & !Self::DATA_MASK == ((Self::SET_MASK << extra_bits) >> extra_bits)
    }

    #[inline(always)]
    fn pack(word: Word) -> Word {
        pack_lsb::<{ Self::BITS_PER_BYTE }>(word)
    }

    #[inline(always)]
    fn unpack(word: Word) -> Word {
        unpack_lsb::<{ Self::BITS_PER_BYTE }>(word) | Self::SET_MASK
    }
}