static MEDIA_EXTS: phf::Set<&'static str> = phf::phf_set! {
"jpg", "jpeg", "png", "gif", "svg", "webp",
"bmp", "tiff", "tif", "heic", "heif", "ico", "apng", "avif",
"mp4", "avi", "mov", "wmv", "flv",
"mkv", "webm", "m4v",
"ogv", "ogx", "mpeg", "ts", "3gp", "3g2",
"mp3", "wav", "ogg",
"aac", "flac", "m4a", "aiff",
"cda", "mid", "midi", "oga", "opus", "weba",
"woff", "woff2", "ttf", "otf", "eot",
"swf", "xap",
"pdf", "eps", "yaml", "yml", "rtf", "txt",
"doc", "docx", "csv", "epub", "gz",
"ics", "md", "webmanifest",
"abw", "azw", "odt", "ods", "odp", "ppt", "pptx", "xls", "xlsx", "vsd",
"arc", "bin", "bz", "bz2", "jar", "mpkg", "rar", "tar", "zip", "7z",
};
#[inline]
pub fn is_media_asset_path(path: &str) -> bool {
let ext = match path.rsplit_once('.') {
Some((_, ext)) if !ext.is_empty() => ext,
_ => return false,
};
if ext.bytes().any(|b| b.is_ascii_uppercase()) {
let lower = ext.to_ascii_lowercase();
MEDIA_EXTS.contains(lower.as_str())
} else {
MEDIA_EXTS.contains(ext)
}
}
#[inline]
pub fn is_media_asset_url(url: &str) -> bool {
let after_scheme = url.split_once("://").map(|(_, rest)| rest).unwrap_or(url);
let path_and_rest = match after_scheme.find('/') {
Some(i) => &after_scheme[i..],
None => return false,
};
let path = path_and_rest
.split_once(['?', '#'])
.map(|(p, _)| p)
.unwrap_or(path_and_rest);
is_media_asset_path(path)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn recognizes_common_media_extensions() {
for url in [
"https://example.com/foo.jpg",
"https://example.com/foo.JPG",
"http://cdn.example.com/dir/sub/clip.MP4",
"https://example.com/file.pdf?token=abc",
"https://example.com/font.woff2#latin",
"https://example.com/archive.tar.gz",
"https://example.com/audio.opus",
] {
assert!(is_media_asset_url(url), "expected media for {url:?}");
}
}
#[test]
fn rejects_non_media_urls() {
for url in [
"https://example.com/index.html",
"https://example.com/page",
"https://example.com/",
"https://example.com",
"not-a-url",
"",
] {
assert!(!is_media_asset_url(url), "expected non-media for {url:?}");
}
}
#[test]
fn path_helper_matches_url_helper() {
assert!(is_media_asset_path("/dir/file.png"));
assert!(is_media_asset_path("file.PNG"));
assert!(!is_media_asset_path("/page"));
assert!(!is_media_asset_path(""));
}
#[test]
fn query_and_fragment_are_ignored() {
assert!(is_media_asset_url(
"https://example.com/img.jpeg?w=100&h=100"
));
assert!(is_media_asset_url("https://example.com/img.jpeg#anchor"));
assert!(!is_media_asset_url("https://example.com/page?file=foo.jpg"));
}
}