rstmt_core/intervals/
interval_base.rs

1/*
2    Appellation: interval_base <module>
3    Created At: 2025.12.21:12:52:17
4    Contrib: @FL03
5*/
6use super::RawQuality;
7
8pub type MajorInterval<T = isize> = IntervalBase<super::Major, T>;
9
10#[derive(Clone, Copy, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
11#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
12pub struct IntervalBase<Q, T = isize>
13where
14    Q: RawQuality,
15{
16    /// the quality of the interval
17    pub quality: Q,
18    /// the total number of steps, or semitones, in the interval
19    pub steps: T,
20}
21
22#[derive(Clone, Copy, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
23#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
24pub struct ConstInterval<const N: isize, Q>
25where
26    Q: RawQuality,
27{
28    /// the quality of the interval
29    pub quality: Q,
30}