use riblt::{Decoder, Encoder, Symbol};
#[derive(Debug, Clone, Copy)]
struct SimpleData(u8, u8);
impl Symbol<2> for SimpleData {
fn to_bytes(&self) -> [u8; 2] {
[self.0, self.1]
}
fn from_bytes(bytes: &[u8; 2]) -> Self {
Self(bytes[0], bytes[1])
}
}
macro_rules! s {
($($a:expr, $b:expr),*) => {
[$(SimpleData($a, $b)),*]
};
}
fn main() {
let local = s!(1, 2, 3, 4, 5, 6);
let remote = s!(1, 2, 6, 7, 3, 4);
let mut remote_encoder = Encoder::new(remote.into_iter());
let mut local_decoder = Decoder::new(local.into_iter());
let mut peeled = Vec::new();
let mut sent_symbols = 0u64;
loop {
let symbol = remote_encoder.next().unwrap();
sent_symbols += 1;
let (done, peeled_) = local_decoder.next_symbol(symbol);
peeled.extend(peeled_);
if done {
break;
}
}
dbg!(peeled, sent_symbols);
}