pub trait MIDIReader: Debug {
type ByteReader: TrackReader;
// Required methods
fn read_bytes_to(
&self,
pos: u64,
bytes: Vec<u8>,
) -> Result<Vec<u8>, MIDILoadError>;
fn len(&self) -> u64;
fn open_reader(
&self,
track_number: Option<u32>,
start: u64,
len: u64,
) -> Self::ByteReader;
// Provided methods
fn read_bytes(
&self,
pos: u64,
count: usize,
) -> Result<Vec<u8>, MIDILoadError> { ... }
fn is_empty(&self) -> bool { ... }
}