use super::{BufReadCompressor, Dictionary, Preferences};
use crate::lz4f::Result;
use std::{
fmt,
io::{BufReader, Read},
};
pub struct ReadCompressor<R: Read> {
inner: BufReadCompressor<BufReader<R>>,
}
impl<R: Read> ReadCompressor<R> {
pub fn new(reader: R, prefs: Preferences) -> Result<Self> {
Ok(Self {
inner: BufReadCompressor::new(BufReader::new(reader), prefs)?,
})
}
pub fn with_dict(reader: R, prefs: Preferences, dict: Dictionary) -> Result<Self> {
Ok(Self {
inner: BufReadCompressor::with_dict(BufReader::new(reader), prefs, dict)?,
})
}
pub fn into_inner(self) -> R {
self.inner.into_inner().into_inner()
}
pub fn get_mut(&mut self) -> &mut R {
self.inner.get_mut().get_mut()
}
pub fn get_ref(&self) -> &R {
self.inner.get_ref().get_ref()
}
}
impl<R> fmt::Debug for ReadCompressor<R>
where
R: Read + fmt::Debug,
{
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt.debug_struct("ReadCompressor")
.field("reader", &self.inner.inner.get_ref())
.field("prefs", &self.inner.comp.prefs())
.finish()
}
}
impl<R: Read> Read for ReadCompressor<R> {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
self.inner.read(buf)
}
}