use bijoux::u64::{DecodeError, decode, decode_all, decode_iter, encode};
fn main() -> Result<(), DecodeError> {
let values: &[u64] = &[0, 1, 42, 247, 248, 503, 504, 65_535, 1u64 << 32, u64::MAX];
let mut buf = Vec::new();
for &v in values {
encode(v, &mut buf);
}
println!("encoded {} values into {} bytes", values.len(), buf.len());
{
let decoded = decode_all(&buf)?;
assert_eq!(decoded, values);
println!("[all] decoded {} values via decode_all", decoded.len());
}
{
let count_below_1000: usize = decode_iter(&buf)
.filter_map(Result::ok)
.filter(|&v| v < 1000)
.count();
println!("[iter] {count_below_1000} values < 1000");
}
{
let decoded: Result<Vec<u64>, DecodeError> = decode_iter(&buf).collect();
assert_eq!(decoded?, values);
println!(
"[collect] decoded {} values via decode_iter().collect::<Result<Vec, _>>()",
values.len()
);
}
{
let mut cursor: &[u8] = &buf;
let mut decoded = Vec::new();
while !cursor.is_empty() {
let (value, n) = decode(cursor)?;
decoded.push(value);
cursor = cursor.get(n..).unwrap_or(&[]);
}
assert_eq!(decoded, values);
println!("[manual] decoded {} values", decoded.len());
}
Ok(())
}