rodio/decoder/
read_seek_source.rs

1use std::io::{Read, Result, Seek, SeekFrom};
2
3use symphonia::core::io::MediaSource;
4
5pub struct ReadSeekSource<T: Read + Seek + Send + Sync> {
6    inner: T,
7}
8
9impl<T: Read + Seek + Send + Sync> ReadSeekSource<T> {
10    /// Instantiates a new `ReadSeekSource<T>` by taking ownership and wrapping the provided
11    /// `Read + Seek`er.
12    pub fn new(inner: T) -> Self {
13        ReadSeekSource { inner }
14    }
15}
16
17impl<T: Read + Seek + Send + Sync> MediaSource for ReadSeekSource<T> {
18    fn is_seekable(&self) -> bool {
19        true
20    }
21
22    fn byte_len(&self) -> Option<u64> {
23        None
24    }
25}
26
27impl<T: Read + Seek + Send + Sync> Read for ReadSeekSource<T> {
28    fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
29        self.inner.read(buf)
30    }
31}
32
33impl<T: Read + Seek + Send + Sync> Seek for ReadSeekSource<T> {
34    fn seek(&mut self, pos: SeekFrom) -> Result<u64> {
35        self.inner.seek(pos)
36    }
37}