Skip to main content

pharos_runtime_media_input/
lib.rs

1pub mod config;
2pub mod protocol;
3
4/// Detects image attachments from their declared media type or original extension.
5pub 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
19/// Detects audio attachments from their declared media type or original extension.
20pub 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}