yozuk_helper_filetype/
lib.rs1use chardetng::EncodingDetector;
2use file_format::FileFormat;
3use mediatype::{media_type, MediaTypeBuf};
4
5pub fn is_utf8_text<T>(data: T) -> bool
6where
7 T: AsRef<[u8]>,
8{
9 let mut detector = EncodingDetector::new();
10 detector.feed(data.as_ref(), true);
11 detector.guess(None, true) == encoding_rs::UTF_8
12}
13
14pub fn guess_media_type<T>(data: T) -> MediaTypeBuf
15where
16 T: AsRef<[u8]>,
17{
18 let format = FileFormat::from_bytes(data.as_ref());
19 match format {
20 FileFormat::ArbitraryBinaryData if is_utf8_text(data) => media_type!(TEXT / PLAIN).into(),
21 FileFormat::ArbitraryBinaryData => media_type!(APPLICATION / OCTET_STREAM).into(),
22 _ => format.media_type().parse().unwrap(),
23 }
24}
25
26pub fn get_file_extension<T>(media_type: T) -> &'static str
27where
28 T: AsRef<str>,
29{
30 mime2ext::mime2ext(media_type).unwrap_or("bin")
31}