use enum_kinds::EnumKind;
use strum::{AsRefStr, EnumString};
#[derive(Clone, AsRefStr, EnumKind)]
#[enum_kind(
DatasetTypeKind,
derive(Hash, AsRefStr, EnumString),
strum(serialize_all = "lowercase")
)]
pub enum DatasetType<C, T> {
Context(C),
Tally(T),
}
impl<C: Clone, T: Clone> DatasetType<C, T> {
pub fn is_context(&self) -> bool {
matches!(self, DatasetType::Context(_))
}
pub fn is_tally(&self) -> bool {
matches!(self, DatasetType::Tally(_))
}
pub fn unwrap_context(&self) -> &C {
match self {
DatasetType::Context(s) => s,
_ => {
panic!("called `unwrap_context()` on a wrong variant")
}
}
}
pub fn unwrap_tally(&self) -> &T {
match self {
DatasetType::Tally(t) => t,
_ => {
panic!("called `unwrap_tally()` on a wrong variant")
}
}
}
}