rust_music/
errors.rs

1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum Error {
5    #[error("I/O error: {0}")]
6    IO(#[from] std::io::Error),
7    #[error("invalid note: {0}")]
8    Note(#[from] NoteError),
9    #[error("invalid chord: {0}")]
10    Chord(#[from] ChordError),
11    #[error("invalid score: {0}")]
12    Score(#[from] ScoreError),
13    #[error("error converting to MIDI: {0}")]
14    ToMidiConversion(#[from] ToMidiConversionError),
15}
16
17#[derive(Error, Debug, PartialEq)]
18pub enum NoteError {
19    #[error("invalid pitch: {0}")]
20    InvalidPitch(u32),
21    #[error("invalid rhythm: {0}")]
22    InvalidRhythm(f64),
23}
24
25#[derive(Error, Debug, PartialEq)]
26pub enum ChordError {
27    #[error("chord contains 0 note")]
28    EmptyChord,
29    #[error("rhythm value is longer than its notes, use a rest")]
30    RhythmTooLong,
31}
32
33#[derive(Error, Debug, PartialEq)]
34pub enum ScoreError {
35    #[error("tempo cannot be 0")]
36    InvalidTempo,
37}
38
39#[derive(Error, Debug, PartialEq)]
40pub enum ToMidiConversionError {
41    #[error("too many parts (16 max): {0}")]
42    TooManyParts(usize),
43}