Skip to main content

faker_rust/games/
dnd.rs

1//! Dungeons & Dragons generator
2
3use crate::base::sample;
4use crate::locale::fetch_locale;
5
6/// Generate a random D&D alignment
7pub fn alignment() -> String {
8    fetch_locale("dnd.alignment", "en")
9        .map(|v| sample(&v))
10        .unwrap_or_else(|| "Lawful Good".to_string())
11}
12
13/// Generate a random D&D background
14pub fn background() -> String {
15    fetch_locale("dnd.background", "en")
16        .map(|v| sample(&v))
17        .unwrap_or_else(|| "Acolyte".to_string())
18}
19
20/// Generate a random D&D city
21pub fn city() -> String {
22    fetch_locale("dnd.cities", "en")
23        .map(|v| sample(&v))
24        .unwrap_or_else(|| "Waterdeep".to_string())
25}
26
27/// Generate a random D&D class (using 'klass' to avoid keyword conflict)
28pub fn klass() -> String {
29    fetch_locale("dnd.klasses", "en")
30        .map(|v| sample(&v))
31        .unwrap_or_else(|| "Fighter".to_string())
32}
33
34/// Generate a random D&D language
35pub fn language() -> String {
36    fetch_locale("dnd.languages", "en")
37        .map(|v| sample(&v))
38        .unwrap_or_else(|| "Common".to_string())
39}
40
41/// Generate a random D&D monster
42pub fn monster() -> String {
43    fetch_locale("dnd.monsters", "en")
44        .map(|v| sample(&v))
45        .unwrap_or_else(|| "Beholder".to_string())
46}
47
48/// Generate a random D&D race
49pub fn race() -> String {
50    fetch_locale("dnd.races", "en")
51        .map(|v| sample(&v))
52        .unwrap_or_else(|| "Human".to_string())
53}
54
55/// Generate a random D&D melee weapon
56pub fn melee_weapon() -> String {
57    fetch_locale("dnd.melee_weapons", "en")
58        .map(|v| sample(&v))
59        .unwrap_or_else(|| "Longsword".to_string())
60}
61
62/// Generate a random D&D ranged weapon
63pub fn ranged_weapon() -> String {
64    fetch_locale("dnd.ranged_weapons", "en")
65        .map(|v| sample(&v))
66        .unwrap_or_else(|| "Longbow".to_string())
67}
68
69#[cfg(test)]
70mod tests {
71    use super::*;
72
73    #[test]
74    fn test_dnd_generation() {
75        assert!(!alignment().is_empty());
76        assert!(!background().is_empty());
77        assert!(!city().is_empty());
78        assert!(!klass().is_empty());
79        assert!(!language().is_empty());
80        assert!(!monster().is_empty());
81        assert!(!race().is_empty());
82        assert!(!melee_weapon().is_empty());
83        assert!(!ranged_weapon().is_empty());
84    }
85}