rust_do_namegen/
lib.rs

1
2pub mod do_username {
3    use rand::Rng;
4    fn to_title_case(s: &str) -> String {
5        let mut c = s.chars();
6        match c.next() {
7            None => String::new(),
8            Some(f) => f.to_uppercase().chain(c).collect(),
9        }
10    }
11    
12    fn random(arr: Vec<&str>) -> &str {
13        let mut rng = rand::thread_rng();
14        let r = rng.gen_range(0, arr.len());
15        arr[r]
16    }
17    fn up_format(arr: Vec<&str>) -> String {
18        let mut new_arr = vec![];
19        for elem in arr {
20            new_arr.push(to_title_case(elem))
21        }
22        new_arr.join("")
23    }
24
25    pub fn get() -> String {
26        let sea_creatures = vec!["walrus", "seal", "fish", "shark", "clam", "coral", "whale", "crab", "lobster", "starfish", "eel", "dolphin", "squid", "jellyfish", "ray", "shrimp", "mantaRay", "angler", "snorkler", "scubaDiver", "urchin", "anemone", "morel", "axolotl"];
27        let sea_objects = vec!["boatShip", "submarine", "yacht", "dinghy", "raft", "kelp", "seaweed", "anchor"];
28        let adjectives = vec!["cute", "adorable", "lovable", "happy", "sandy", "bubbly", "friendly", "floating", "drifting"];
29        let mut size= vec!["large", "big", "small", "giant", "massive", "tiny", "little", "yuge"];
30        let mut verbs = vec!["swimming", "sleeping", "eating", "hiding"];
31        let colors = vec!["blue", "blueGreen", "darkCyan", "electricBlue", "greenBlue", "lightCyan", "lightSeaGreen", "seaGreen", "turquoise", "aqua", "aquamarine", "teal", "cyan", "gray", "darkBlue", "cerulean", "azure", "lapis", "navy"];
32    
33        let mut sea_list = sea_objects;
34        let mut descriptors = adjectives;
35        
36        sea_list.append(&mut sea_creatures.clone());
37        descriptors.append(&mut size);
38
39        let mut descriptors_and_verbs = descriptors.clone();
40        descriptors_and_verbs.append(&mut verbs);
41
42        let rand_noun = random(sea_list);
43        let rand_color = random(colors);
44        
45        let rand_desc: &str;
46        if sea_creatures.contains(&rand_noun) {
47            rand_desc = random(descriptors_and_verbs);
48        } else {
49            rand_desc = random(descriptors);
50        }
51
52        if format!("{}{}{}", rand_desc, rand_color, rand_noun).len() <= 30 {
53            return up_format(vec![rand_desc, rand_color, rand_noun])
54          } else if format!("{}{}", rand_desc, rand_noun).len() <= 30 {
55            return up_format(vec![rand_desc, rand_noun])
56          } else if format!("{}{}", rand_color, rand_noun).len() <= 30 {
57            return up_format(vec![rand_color, rand_noun])
58          } else {
59            return up_format(vec![rand_noun])
60          }
61    }
62}