midi_toolkit/io/
errors.rs1use thiserror::Error;
2
3#[derive(Debug)]
4pub enum MIDILoadError {
5 CorruptChunks,
6 FilesystemError(std::io::Error),
7 FileTooBig,
8}
9
10impl From<std::io::Error> for MIDILoadError {
11 fn from(e: std::io::Error) -> Self {
12 MIDILoadError::FilesystemError(e)
13 }
14}
15
16#[derive(Debug, Error)]
17pub enum MIDIParseError {
18 CorruptEvent {
19 track_number: Option<u32>,
20 position: u64,
21 },
22 UnexpectedTrackEnd {
23 track_number: Option<u32>,
24 track_start: u64,
25 expected_track_end: u64,
26 found_track_end: u64,
27 },
28 FilesystemError(#[from] std::io::Error),
29}
30
31impl std::fmt::Display for MIDIParseError {
32 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33 match self {
34 MIDIParseError::CorruptEvent {
35 track_number,
36 position,
37 } => match track_number {
38 Some(track_number) => write!(
39 f,
40 "Corrupt event (track {track_number}, position: {position:#06x})",
41 ),
42 None => write!(f, "Corrupt event (position: {position:#06x})", ),
43 },
44 MIDIParseError::UnexpectedTrackEnd {
45 track_number,
46 track_start,
47 expected_track_end,
48 found_track_end,
49 } => match track_number {
50 Some(track_number) => write!(f, "Unexpected track end (track {track_number}, track start: {track_start:#06x}, expected end: {expected_track_end:#06x}, found end: {found_track_end:#06x})"),
51 None => write!(f, "Unexpected track end (track start: {track_start:#06x}, expected end: {expected_track_end:#06x}, found end: {found_track_end:#06x})")
52 },
53 MIDIParseError::FilesystemError(e) => write!(f, "Filesystem error: {e}"),
54 }
55 }
56}
57
58#[derive(Debug, Error)]
59pub enum MIDIWriteError {
60 FilesystemError(#[from] std::io::Error),
61}
62
63impl std::fmt::Display for MIDIWriteError {
64 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
65 match self {
66 MIDIWriteError::FilesystemError(e) => write!(f, "Filesystem error: {e}"),
67 }
68 }
69}