pharos_runtime_media_input/
lib.rs1pub mod config;
2pub mod protocol;
3
4pub fn is_image_input(media_type: &str, original_name: &str) -> bool {
6 matches!(
7 media_type.to_ascii_lowercase().as_str(),
8 "image/jpeg" | "image/png" | "image/webp" | "image/tiff" | "image/bmp" | "image/gif"
9 ) || matches!(
10 original_name
11 .to_ascii_lowercase()
12 .rsplit('.')
13 .next()
14 .unwrap_or_default(),
15 "jpg" | "jpeg" | "png" | "webp" | "tif" | "tiff" | "bmp" | "gif"
16 )
17}
18
19pub fn is_audio_input(media_type: &str, original_name: &str) -> bool {
21 media_type.to_ascii_lowercase().starts_with("audio/")
22 || matches!(
23 original_name
24 .to_ascii_lowercase()
25 .rsplit('.')
26 .next()
27 .unwrap_or_default(),
28 "wav" | "wave" | "mp3" | "aiff" | "aif" | "flac" | "ogg" | "oga" | "m4a" | "aac"
29 )
30}
31
32#[cfg(test)]
33mod tests {
34 use super::{is_audio_input, is_image_input};
35
36 #[test]
37 fn recognizes_supported_media_without_accepting_unrelated_files() {
38 assert!(is_audio_input("audio/webm", "recording.webm"));
39 assert!(is_audio_input("application/octet-stream", "context.mp3"));
40 assert!(!is_audio_input("application/pdf", "brief.pdf"));
41 assert!(is_image_input("application/octet-stream", "context.webp"));
42 assert!(!is_image_input("application/pdf", "brief.pdf"));
43 }
44}