warlocks_cauldron/providers/
file.rs

1use regex::Regex;
2
3use super::dependencies::*;
4use crate::Text;
5
6
7/// Methods collection for generate data related to files
8pub struct File;
9
10impl File {
11    /// Get a random file extension from list
12    ///
13    /// # Arguments
14    /// * `file_type` - FileType enum
15    pub fn extension(file_type: Option<FileType>) -> &'static str {
16        let ftype = validate_enum(file_type, None);
17        get_random_element(EXTENSIONS.get(ftype).expect("Cant find file_type extensions!").iter())
18    }
19
20    /// Get a random mime type from list
21    ///
22    /// # Arguments
23    /// * `file_type` - MimeType enum
24    pub fn mime_type(mime_type: Option<MimeType>) -> &'static str {
25        let mtype = validate_enum(mime_type, None);
26        get_random_element(MIME_TYPES.get(mtype).expect("Cant find mime_type!").iter())
27    }
28
29    /// Get a random file extension from list
30    ///
31    /// # Arguments
32    /// * `minimum` - Minimum value
33    /// * `maximum` - Maximum value
34    pub fn size(minimum: i32, maximum: i32) -> String {
35        format!("{} {}", randint(minimum, maximum), 
36            get_random_element(vec!["bytes", "kB", "MB", "GB", "TB"].into_iter()))
37    }
38
39    /// Get a random file name with some extension
40    ///
41    /// # Arguments
42    /// * `file_type` - FileType enum
43    pub fn file_name(file_type: Option<FileType>) -> String {
44        let replacer = get_random_element(vec!["_", "-"].into_iter());
45        let word = Text(&Locale::EN).word().trim();
46        
47        let re = Regex::new(r"\s+").unwrap();
48        let name = re.replace_all(word, replacer);
49        let ext = Self::extension(file_type);
50
51        format!("{name}{ext}")
52    }
53}