rdb 0.3.0

Fast and efficient RDB parsing utility
Documentation
mod common;
mod hash;
mod list;
mod rdb;
mod set;
mod sorted_set;

use std::io::Read;

use self::rdb::DecoderState;
use crate::filter::Filter;
use crate::types::{RdbResult, RdbValue};

pub struct RdbDecoder<R: Read, F: Filter> {
    reader: R,
    filter: F,
    state: DecoderState,
}

impl<R: Read, F: Filter> RdbDecoder<R, F> {
    pub(crate) fn new(mut reader: R, filter: F) -> RdbResult<Self> {
        rdb::verify_header(&mut reader)?;
        Ok(Self {
            reader,
            filter,
            state: DecoderState::default(),
        })
    }
}

impl<R: Read, F: Filter> Iterator for RdbDecoder<R, F> {
    type Item = RdbResult<RdbValue>;

    fn next(&mut self) -> Option<Self::Item> {
        if self.state.reached_eof {
            return None;
        }
        Some(rdb::process_next_operation(
            &mut self.reader,
            &self.filter,
            &mut self.state,
        ))
    }
}