use std::fmt::Debug;
use std::fmt::Formatter;
use std::fmt::Result as FmtResult;
use std::io::Result as IoResult;
use qubit_io::Input;
use crate::metadata::OpenedFileInfo;
pub struct FileReader {
inner: Box<dyn Input<Item = u8> + Send>,
info: OpenedFileInfo,
}
impl FileReader {
#[inline]
#[must_use]
pub(crate) fn new(info: OpenedFileInfo, inner: Box<dyn Input<Item = u8> + Send>) -> Self {
Self { inner, info }
}
#[inline]
#[must_use]
pub fn info(&self) -> &OpenedFileInfo {
&self.info
}
}
impl Input for FileReader {
type Item = u8;
#[inline]
fn is_buffered(&self) -> bool {
self.inner.is_buffered()
}
#[inline]
unsafe fn read_unchecked(&mut self, output: &mut [u8], index: usize, count: usize) -> IoResult<usize> {
unsafe { self.inner.read_unchecked(output, index, count) }
}
}
impl Debug for FileReader {
#[inline]
fn fmt(&self, formatter: &mut Formatter<'_>) -> FmtResult {
formatter
.debug_struct("FileReader")
.field("info", &self.info)
.finish_non_exhaustive()
}
}