use crate::{EncodingPacket, decoder::*};
#[allow(non_snake_case)]
pub struct RaptorDecoder {
decoder: Decoder,
K: u32,
piece_size: u16,
}
#[allow(non_snake_case)]
impl RaptorDecoder {
pub fn new(K:u32, piece_size:u16)->Result<Self,i32>{
Ok(Self{
decoder: Decoder::with_defaults(K as u64 * piece_size as u64, piece_size),
K,
piece_size,
})
}
pub fn piece_size(&self) -> usize {
self.piece_size as usize
}
pub fn decode_raw(&mut self, _seq: u32, piece: Vec<u8>) -> Result<DecodeStatus,i32>{
let packet = EncodingPacket::deserialize(piece);
let status = self.decoder.decode(packet);
Ok(status)
}
pub fn retrieve_piece(&self, index: usize, buffer:&mut [u8]) -> Result<bool,i32>{
self.decoder.retrieve_piece(index, buffer)
}
}