use crate::error::Error;
use crate::metadata::Metadata;
use std::io;
use std::io::Read;
use std::io::Seek;
use std::io::SeekFrom;
pub struct Disc<T: Read + Seek> {
pub metadata: Metadata,
io: T,
}
impl<T: Read + Seek> Disc<T> {
pub fn try_from(io: T) -> Result<Self, Error> {
let mut io = io;
let metadata = Metadata::try_from(&mut io)?;
Ok(Self { metadata, io })
}
}
impl<T: Read + Seek> Read for Disc<T> {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
self.io.read(buf)
}
}
impl<T: Read + Seek> Seek for Disc<T> {
fn seek(&mut self, pos: SeekFrom) -> io::Result<u64> {
self.io.seek(pos)
}
}