use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "specta", derive(specta::Type))]
pub enum ExtKind {
Image,
Iframe,
Pdf,
Video,
Audio,
Model,
Transclusion, Notebook, Table, Other, }
pub fn reference_kind_for_ext(ext: &str) -> ExtKind {
crate::resolve::asset_registry::asset_info(ext)
.map(|a| a.kind)
.unwrap_or(ExtKind::Other)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn classifies_each_family() {
assert_eq!(reference_kind_for_ext("png"), ExtKind::Image);
assert_eq!(reference_kind_for_ext("html"), ExtKind::Iframe);
assert_eq!(reference_kind_for_ext("pdf"), ExtKind::Pdf);
assert_eq!(reference_kind_for_ext("mp4"), ExtKind::Video);
assert_eq!(reference_kind_for_ext("mp3"), ExtKind::Audio);
assert_eq!(reference_kind_for_ext("glb"), ExtKind::Model);
assert_eq!(reference_kind_for_ext("md"), ExtKind::Transclusion);
assert_eq!(reference_kind_for_ext("ipynb"), ExtKind::Notebook);
assert_eq!(reference_kind_for_ext("csv"), ExtKind::Table);
assert_eq!(reference_kind_for_ext("xyz"), ExtKind::Other);
}
#[test]
fn kind_matches_registry_for_all_known_exts() {
use crate::resolve::asset_registry::all_assets;
for a in all_assets() {
assert_eq!(reference_kind_for_ext(a.ext), a.kind, "kind mismatch for {}", a.ext);
}
assert_eq!(reference_kind_for_ext("avif"), ExtKind::Image); }
}