use super::Handler;
use crate::{error, path::Path};
use std::collections::VecDeque;
#[derive(Debug)]
pub struct Buffer {
stored: VecDeque<(Option<String>, Vec<u8>)>,
use_path: bool,
}
impl Default for Buffer {
fn default() -> Self {
Self {
stored: VecDeque::new(),
use_path: false,
}
}
}
impl Handler for Buffer {
fn handle(
&mut self,
path: &Path,
_matcher_idx: usize,
data: Option<&[u8]>,
) -> Result<(), error::Handler> {
let path_opt = if self.use_path {
Some(path.to_string())
} else {
None
};
self.stored.push_back((path_opt, data.unwrap().to_vec()));
Ok(())
}
fn use_path(&self) -> bool {
self.use_path
}
}
impl Buffer {
pub fn new() -> Self {
Self::default()
}
pub fn set_use_path(mut self, use_path: bool) -> Self {
self.use_path = use_path;
self
}
pub fn pop(&mut self) -> Option<(Option<String>, Vec<u8>)> {
self.stored.pop_front()
}
}