rstmt_core/pitch/impls/
impl_pclass_repr.rs

1/*
2    Appellation: impl_pclass_repr <module>
3    Created At: 2025.12.31:16:01:04
4    Contrib: @FL03
5*/
6use crate::pitch::pitch_class::PitchClass;
7
8use crate::pitch::{Flat, Natural, RawPitchClass, Sharp};
9
10impl<N> PitchClass<N>
11where
12    N: RawPitchClass,
13{
14    /// initialize a new, _natural_ pitch class
15    pub const fn natural(class: N) -> PitchClass<N, Natural>
16    where
17        N: RawPitchClass<Tag = Natural>,
18    {
19        PitchClass {
20            class,
21            kind: Natural,
22        }
23    }
24    /// initialize a _sharp_ instance of the given class
25    pub const fn sharp(class: N) -> PitchClass<N, Sharp>
26    where
27        N: RawPitchClass<Tag = Sharp>,
28    {
29        PitchClass { class, kind: Sharp }
30    }
31    /// initialize a _flat_ instance of the given class
32    pub const fn flat(class: N) -> PitchClass<N, Flat>
33    where
34        N: RawPitchClass<Tag = Flat>,
35    {
36        PitchClass { class, kind: Flat }
37    }
38}
39
40impl<N> PitchClass<N, Natural> where N: RawPitchClass<Tag = Natural> {}
41
42impl<N> PitchClass<N, Sharp> where N: RawPitchClass<Tag = Sharp> {}
43
44impl<N> PitchClass<N, Flat> where N: RawPitchClass<Tag = Flat> {}