redact_composer_musical/scale/
mode.rs

1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3
4#[cfg(feature = "redact-composer")]
5use redact_composer_core::derive::Element;
6
7/// Offset applied to a [`Scale`](super::Scale)'s interval sequence.
8#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)]
9#[cfg_attr(feature = "redact-composer", derive(Element))]
10#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11pub enum Mode {
12    /// No offset
13    #[default]
14    Ionian,
15    /// Offset of 1, starting a scale from the second interval step.
16    Dorian,
17    /// Offset of 2, starting a scale from the third interval step.
18    Phrygian,
19    /// Offset of 3, starting a scale from the fourth interval step.
20    Lydian,
21    /// Offset of 4, starting a scale from the fifth interval step.
22    Mixolydian,
23    /// Offset of 5, starting a scale from the sixth interval step.
24    Aeolian,
25    /// Offset of 6, starting a scale from the seventh interval step.
26    Locrian,
27}
28
29impl Mode {
30    /// Returns a [Vec]<[Mode]> of all types.
31    pub fn values() -> Vec<Mode> {
32        vec![
33            Self::Ionian,
34            Self::Dorian,
35            Self::Phrygian,
36            Self::Lydian,
37            Self::Mixolydian,
38            Self::Aeolian,
39            Self::Locrian,
40        ]
41    }
42}