#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum CatalogFormat {
#[default]
Hang,
Msf,
}
impl CatalogFormat {
pub const DEFAULT: Self = Self::Hang;
pub fn extension(self) -> &'static str {
match self {
Self::Hang => ".hang",
Self::Msf => ".msf",
}
}
pub fn detect(name: &str) -> Option<Self> {
if name.ends_with(Self::Hang.extension()) {
Some(Self::Hang)
} else if name.ends_with(Self::Msf.extension()) {
Some(Self::Msf)
} else {
None
}
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn detect_hang() {
assert_eq!(CatalogFormat::detect("demo/bbb.hang"), Some(CatalogFormat::Hang));
assert_eq!(CatalogFormat::detect("bbb.hang"), Some(CatalogFormat::Hang));
}
#[test]
fn detect_msf() {
assert_eq!(CatalogFormat::detect("demo/bbb.msf"), Some(CatalogFormat::Msf));
}
#[test]
fn detect_none() {
assert_eq!(CatalogFormat::detect("demo/bbb"), None);
assert_eq!(CatalogFormat::detect(""), None);
assert_eq!(CatalogFormat::detect("demo/foo.v2"), None);
}
}