fedimovies/fedimovies-utils/src/files.rs

46 lines
1.2 KiB
Rust
Raw Normal View History

2023-04-24 15:35:32 +00:00
use std::fs::{set_permissions, File, Permissions};
2021-04-09 00:22:17 +00:00
use std::io::prelude::*;
2023-04-24 15:35:32 +00:00
use std::io::Error;
use std::os::unix::fs::PermissionsExt;
2021-11-13 17:37:31 +00:00
use std::path::Path;
2021-04-09 00:22:17 +00:00
use mime_guess::get_mime_extensions_str;
use mime_sniffer::MimeTypeSniffer;
pub fn sniff_media_type(data: &[u8]) -> Option<String> {
data.sniff_mime_type().map(|val| val.to_string())
}
pub fn get_media_type_extension(media_type: &str) -> Option<&'static str> {
match media_type {
// Override extension provided by mime_guess
"image/jpeg" => Some("jpg"),
2023-04-24 15:35:32 +00:00
_ => get_mime_extensions_str(media_type)
.and_then(|extensions| extensions.first())
.copied(),
}
2021-12-29 14:34:22 +00:00
}
pub fn write_file(data: &[u8], file_path: &Path) -> Result<(), Error> {
2021-12-29 14:34:22 +00:00
let mut file = File::create(file_path)?;
file.write_all(data)?;
Ok(())
}
pub fn set_file_permissions(file_path: &Path, mode: u32) -> Result<(), Error> {
let permissions = Permissions::from_mode(mode);
set_permissions(file_path, permissions)?;
2021-12-29 14:34:22 +00:00
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_media_type_extension() {
2023-04-24 15:35:32 +00:00
assert_eq!(get_media_type_extension("image/png"), Some("png"),);
assert_eq!(get_media_type_extension("image/jpeg"), Some("jpg"),);
}
}