use crate::fse::FseBackend;
use super::constants::*;
use super::frontend_ring::FrontendRing;
use std::fmt;
use std::io::{self, Write};
pub struct LzfseWriterBytes<'a> {
frontend: FrontendRing<'a, Input>,
backend: &'a mut FseBackend,
vec: Vec<u8>,
}
impl<'a> LzfseWriterBytes<'a> {
#[inline(always)]
pub(super) fn new(
frontend: FrontendRing<'a, Input>,
backend: &'a mut FseBackend,
vec: Vec<u8>,
) -> Self {
Self { frontend, backend, vec }
}
pub fn finalize(mut self) -> io::Result<Vec<u8>> {
self.frontend.flush(&mut self.backend, &mut self.vec)?;
Ok(self.vec)
}
}
impl<'a> Write for LzfseWriterBytes<'a> {
#[inline(always)]
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.frontend.write(&mut self.backend, buf, &mut self.vec)
}
#[inline(always)]
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}
impl<'a> fmt::Debug for LzfseWriterBytes<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("LzfseWriterBytes").finish()
}
}