#[derive(Debug, PartialEq)] pub enum UploadFileType { Image, Sound, Video, Doc, Code, } pub struct UploadFileData { pub up_type: UploadFileType, pub filename: String, } pub fn dirname_from_type(upload_type: &UploadFileType) -> String { match upload_type { UploadFileType::Image => String::from("images"), UploadFileType::Sound => String::from("sounds"), UploadFileType::Video => String::from("videos"), UploadFileType::Doc => String::from("docs"), UploadFileType::Code => String::from("source_code"), } } pub fn upload_type_from_file_ext(ext: &String) -> UploadFileType { match &ext[..] { "webp" | "jpg" | "png" | "jpeg" | "bmp" | "gif" => UploadFileType::Image, "mp3" | "ogg" | "wav" | "opus" => UploadFileType::Sound, "mp4" | "webm" | "ogv" => UploadFileType::Video, "js" | "css" | "html" => UploadFileType::Code, _ => UploadFileType::Doc, } } pub fn file_ext(file_name: &String) -> Result<String, String> { let parts = file_name.split(".").collect::<Vec<&str>>(); let err_msg = format!("Couldn't get extension from filename : {}", file_name); if parts.len() < 2 { return Err(err_msg); } match parts.last() { Some(ext) => Ok(ext.to_string()), None => Err(err_msg), } }