pub const fn empty() -> &'static [u8; 6] {
b"DIDL\0\0"
}
pub fn units(count: usize) -> Vec<u8> {
let mut bytes = header(count, count);
bytes.extend(core::iter::repeat_n(0x7f, count));
bytes
}
pub fn text(value: &str) -> Vec<u8> {
let mut bytes = header(1, 1 + unsigned_len(value.len()) + value.len());
bytes.push(0x71);
unsigned(value.len(), &mut bytes);
bytes.extend_from_slice(value.as_bytes());
bytes
}
fn header(count: usize, payload_bytes: usize) -> Vec<u8> {
let capacity = (5 + unsigned_len(count)).saturating_add(payload_bytes);
let mut bytes = Vec::with_capacity(capacity);
bytes.extend_from_slice(b"DIDL\0");
unsigned(count, &mut bytes);
bytes
}
fn unsigned_len(value: usize) -> usize {
((usize::BITS - value.leading_zeros()).max(1) as usize).div_ceil(7)
}
fn unsigned(mut value: usize, bytes: &mut Vec<u8>) {
loop {
let byte = (value & 0x7f) as u8;
value >>= 7;
bytes.push(byte | if value == 0 { 0 } else { 0x80 });
if value == 0 {
return;
}
}
}