#[doc(inline)]
pub use self::kinds::*;
pub(crate) mod kinds;
#[doc(hidden)]
pub mod qualities;
pub(crate) mod prelude {
pub use super::kinds::*;
pub use super::IntervalKind;
}
pub(crate) type IntervalTy = i8;
pub trait MusicalInterval {
fn as_i8(&self) -> i8;
}
pub trait IntoInterval {
fn into_interval(self) -> Intervals;
}
pub trait IntervalKind {
private!();
fn kind(&self) -> Intervals {
Intervals::from_value(self.value())
}
fn value(&self) -> IntervalTy;
}
impl<I> IntoInterval for I
where
I: Into<Intervals>,
{
fn into_interval(self) -> Intervals {
self.into()
}
}
impl IntervalKind for Intervals {
seal!();
fn value(&self) -> IntervalTy {
self.value()
}
}