use std::io::{Read, Result, Seek, SeekFrom};
use symphonia::core::io::MediaSource;
use super::Settings;
pub struct ReadSeekSource<T: Read + Seek + Send + Sync> {
inner: T,
byte_len: Option<u64>,
is_seekable: bool,
}
impl<T: Read + Seek + Send + Sync> ReadSeekSource<T> {
#[inline]
pub fn new(inner: T, settings: &Settings) -> Self {
ReadSeekSource {
inner,
byte_len: settings.byte_len,
is_seekable: settings.is_seekable,
}
}
}
impl<T: Read + Seek + Send + Sync> MediaSource for ReadSeekSource<T> {
#[inline]
fn is_seekable(&self) -> bool {
self.is_seekable
}
#[inline]
fn byte_len(&self) -> Option<u64> {
self.byte_len
}
}
impl<T: Read + Seek + Send + Sync> Read for ReadSeekSource<T> {
#[inline]
fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
self.inner.read(buf)
}
}
impl<T: Read + Seek + Send + Sync> Seek for ReadSeekSource<T> {
#[inline]
fn seek(&mut self, pos: SeekFrom) -> Result<u64> {
self.inner.seek(pos)
}
}