dave 0.2.0

Rust DAVE primitives with Discord Opus audio and video frame transform support.
Documentation
pub(crate) fn size(mut value: u64) -> usize {
    let mut size = 1;
    while value >= 0x80 {
        value >>= 7;
        size += 1;
    }
    size
}

pub(crate) fn write(mut value: u64, output: &mut [u8]) -> Option<usize> {
    let mut written = 0;
    loop {
        let byte = (value & 0x7f) as u8;
        value >>= 7;
        let next = if value == 0 { byte } else { byte | 0x80 };
        *output.get_mut(written)? = next;
        written += 1;
        if value == 0 {
            return Some(written);
        }
    }
}

pub(crate) fn read(input: &[u8]) -> Option<(u64, usize)> {
    let mut value = 0_u64;
    for (index, byte) in input.iter().copied().enumerate() {
        value |= u64::from(byte & 0x7f) << (index * 7);
        if byte & 0x80 == 0 {
            return Some((value, index + 1));
        }
    }
    None
}