pub fn encode_small_int(n: i64) -> Vec<u8> {
match n {
-1 => vec![0x0F], 0..=16 => vec![0x10 + n as u8], _ => encode_varint(n),
}
}
fn encode_varint(n: i64) -> Vec<u8> {
let bytes = n.to_le_bytes();
let len = minimal_bytes(n);
let opcode = match len {
1 => 0x00, 2 => 0x01, 4 => 0x02, _ => 0x03, };
let mut result = vec![opcode];
result.extend_from_slice(&bytes[..len]);
result
}
fn minimal_bytes(n: i64) -> usize {
if (-128..=127).contains(&n) {
1
} else if (-32768..=32767).contains(&n) {
2
} else if (-2147483648..=2147483647).contains(&n) {
4
} else {
8
}
}