reliudp 0.2.0

A custom Reliable UDP protocol for Rust
Documentation
use fragment::{Fragment, FragmentMeta};

pub struct FragmentGenerator<'a, I> where I: Iterator<Item = &'a [u8]> + Clone {
    seq_id: u32,
    frag_total: u8,
    next_frag: u8,
    frag_meta: FragmentMeta,
    iterator: I
}

impl<'a, I> FragmentGenerator<'a, I> where I: Iterator<Item = &'a [u8]> + Clone {
    pub fn new(iterator: I, seq_id: u32, frag_total: u8, frag_meta: FragmentMeta) -> Self {
        FragmentGenerator {
            seq_id,
            frag_total,
            iterator,
            frag_meta,
            next_frag: 0,
        }
    }
}

impl<'a, I: Iterator<Item = &'a [u8]> + Clone> Iterator for FragmentGenerator<'a, I> {
    type Item = Fragment<&'a [u8]>;
    fn next(&mut self) -> Option<Self::Item> {
        let data = self.iterator.next();
        data.map(|data| {
            let current_frag = self.next_frag;
            self.next_frag += 1;
            Fragment {
                seq_id: self.seq_id,
                frag_total: self.frag_total,
                frag_id: current_frag,
                frag_meta: self.frag_meta,
                data,
            }
        })
    }
}

impl<'a, I: Iterator<Item = &'a [u8]> + Clone> Clone for FragmentGenerator<'a, I> {
    fn clone(&self) -> Self {
        FragmentGenerator {
            seq_id: self.seq_id,
            next_frag: self.next_frag,
            frag_total: self.frag_total,
            frag_meta: self.frag_meta,
            iterator: self.iterator.clone(),
        }
    }
}