use crate::octave::Octave;
#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[cfg_attr(
feature = "serde",
derive(serde::Deserialize, serde::Serialize),
serde(deny_unknown_fields, default, rename_all = "snake_case")
)]
#[repr(C)]
pub struct Aspn {
pub(crate) class: usize,
pub(crate) octave: Octave,
}
pub trait AsAspn {
fn as_aspn(&self) -> Aspn;
}
pub trait IntoAspn {
fn into_aspn(self) -> Aspn;
}
impl<T> AsAspn for T
where
T: Clone + IntoAspn,
{
fn as_aspn(&self) -> Aspn {
self.clone().into_aspn()
}
}
impl<T> IntoAspn for T
where
T: Into<Aspn>,
{
fn into_aspn(self) -> Aspn {
self.into()
}
}