1use strum_macros::{Display as EnumDisplay, EnumIter, EnumString};
2
3#[derive(EnumString, EnumIter, EnumDisplay, Debug, Copy, Clone)]
5pub enum Mode {
6 Ionian,
7 Dorian,
8 Phrygian,
9 Mixolydian,
10 Lydian,
11 Aeolian,
12 Locrian,
13}
14
15impl IntoIterator for Mode {
16 type Item = &'static usize;
17 type IntoIter = std::slice::Iter<'static, usize>;
18
19 fn into_iter(self) -> Self::IntoIter {
20 match self {
23 Mode::Ionian => [2, 2, 1, 2, 2, 2].iter(),
24 Mode::Dorian => [2, 1, 2, 2, 2, 1].iter(),
25 Mode::Phrygian => [1, 2, 2, 2, 1, 2].iter(),
26 Mode::Mixolydian => [2, 2, 2, 1, 2, 2].iter(),
27 Mode::Lydian => [2, 2, 1, 2, 2, 1].iter(),
28 Mode::Aeolian => [2, 1, 2, 2, 1, 2].iter(),
29 Mode::Locrian => [1, 2, 2, 1, 2, 2].iter(),
30 }
31 }
32}