use crate::pitch::pitch_class::PitchClass;
use crate::pitch::{Flat, Natural, RawPitchClass, Sharp};
impl<N> PitchClass<N>
where
N: RawPitchClass,
{
pub const fn natural(class: N) -> PitchClass<N, Natural>
where
N: RawPitchClass<Tag = Natural>,
{
PitchClass {
class,
kind: Natural,
}
}
pub const fn sharp(class: N) -> PitchClass<N, Sharp>
where
N: RawPitchClass<Tag = Sharp>,
{
PitchClass { class, kind: Sharp }
}
pub const fn flat(class: N) -> PitchClass<N, Flat>
where
N: RawPitchClass<Tag = Flat>,
{
PitchClass { class, kind: Flat }
}
}
impl<N> PitchClass<N, Natural> where N: RawPitchClass<Tag = Natural> {}
impl<N> PitchClass<N, Sharp> where N: RawPitchClass<Tag = Sharp> {}
impl<N> PitchClass<N, Flat> where N: RawPitchClass<Tag = Flat> {}